gpt4 book ai didi

c - 使用 fopen() 时文件指针未赋值

转载 作者:行者123 更新时间:2023-11-30 14:32:46 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 C 程序,该程序将从 csv 文件读取数据并对这些数据执行一些计算。

不幸的是,我遇到一个问题,即我的文件指针 fptr 在调用 fopen() 后没有被赋值。我在单步调试 VS 2017 的调试器后知道是这种情况。但我不知道为什么会这样。这是一个巨大的问题,意味着每当我尝试从文件中读取数据或关闭文件时,我的程序都会抛出一些非常讨厌的异常。

我的代码如下:

ma​​in.c

#include<stdio.h>
#include <stdlib.h> // For exit() function
#include"constants.h" //For access to all project constants

/***************************************************************************************************************
To keep the terminal from automatically closing
Only useful for debugging/testing purposes
***************************************************************************************************************/
void preventTerminalClosure() {
//flushes the standard input
//(clears the input buffer)
while ((getchar()) != '\n');
printf("\n\nPress the ENTER key to close the terminal...\n");
getchar();
}

/***************************************************************************************************************
Read the given input file
***************************************************************************************************************/
void readInputFile(char fileName[]) {
FILE *fptr;
char output[255];

//open the file
if (fptr = fopen(fileName, "r") != NULL) { //read file if file exists
//fscanf(fptr, "%[^\n]", output);
//printf("Data from the file:\n%s", output);
printf("<--Here-->");
}else {
printf("\nERROR 1: File %s not found\n", fileName);
preventTerminalClosure();
exit(1);
}

fclose(fptr); //close the file
}

/***************************************************************************************************************
* * * Main * * *
***************************************************************************************************************/
void main() {
char testName[MAX_NAME_SIZE];

printf("Hello World!\n");
printf("Please enter your name: ");
scanf("%s", testName);

printf("It's nice to meet you %s!", testName);

readInputFile("dummy.txt");

preventTerminalClosure(); //Debug only

}

我已确保我的假文件确实存在并且位于正确的位置。否则我的代码将命中 readInputFile() 内的 else block 。这是我已经彻底测试过的。

显然我缺少一些基本的东西来解释这个指针的行为;但那是什么,我不确定。任何帮助,将不胜感激! :)

最佳答案

使用括号强制执行顺序,以便在为 fopen 返回的值赋值后将 fptrNULL 进行比较:

FILE *fptr;
char output[255];

//open the file
if ( (fptr = fopen(fileName, "r")) != NULL)

关于c - 使用 fopen() 时文件指针未赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59687916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com