打开并解析文件

时间:2013-09-25 14:04:08

标签: c

我正在通过一个编程项目来完成我所在的课程,我正在努力解决我认为只是对C编程的一个基本误解,并希望SO可以提供帮助。我正在尝试用这段代码打开一个文件:

FILE *fp;
if(fp = fopen("testfile.txt", "r") == NULL){
    perror("fileopen");
}

当我尝试编译该代码时,我收到此警告: 警告:赋值使用整数而不使用强制转换

然后,当我尝试读取文件时,我遇到了分段错误。

我是一名经验丰富的java程序员,但我在C语言中有一些关于指针和数据类型的东西。我不明白。

谢谢!

3 个答案:

答案 0 :(得分:2)

其他人指出,if出了问题。为了避免这种情况,拆分东西。它更具可读性且不易出错:

FILE *fp;
fp = fopen("testfile.txt", "r");
if(fp  == NULL) {
    perror("fileopen");
}

或者,你看到的很多:

FILE *fp;
fp = fopen("testfile.txt", "r");
if(!fp) {
    perror("fileopen");
}

答案 1 :(得分:1)

问题是对运算符优先级的误解。首先评估fopen("testfile.txt", "r") == NULL,结果(1或0)存储在指针fp中,而不是fopen("testfile.txt", "r")的实际返回值。

您应该在if语句中使用(fp = fopen("testfile.txt", "r")) == NULL。或者,如果你刚刚开始,可能最好将其分解并写下来:

FILE *fp = fopen("testfile.txt", "r");
if(fp == NULL){
    perror("fileopen");
}

答案 2 :(得分:1)

你错过了一对parens:

(fp = fopen("testfile.txt", "r") == NULL)

被解析为

(fp = (fopen("testfile.txt", "r") == NULL))

评估比较,给出int,然后将其存储在指针值变量中,从而发出警告。

应该是

((fp = fopen("testfile.txt", "r")) == NULL)