我正在通过一个编程项目来完成我所在的课程,我正在努力解决我认为只是对C编程的一个基本误解,并希望SO可以提供帮助。我正在尝试用这段代码打开一个文件:
FILE *fp;
if(fp = fopen("testfile.txt", "r") == NULL){
perror("fileopen");
}
当我尝试编译该代码时,我收到此警告: 警告:赋值使用整数而不使用强制转换
然后,当我尝试读取文件时,我遇到了分段错误。
我是一名经验丰富的java程序员,但我在C语言中有一些关于指针和数据类型的东西。我不明白。
谢谢!
答案 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)