C:fgetc给出了segfault

mls*_*ent 0 c file-io segmentation-fault

以下代码给了我一个段错误,我不知道为什么.除了最后返回0之外,它是我的主函数中唯一的代码.此外,它成功打印"fr open".

//create file pointer and open file
FILE *fr;
fr = fopen("IntegerArray.txt", "r");

if(fr = NULL){
        printf("fr is null\n");
}
else{
        printf("fr opened\n");
}

int ch = fgetc(fr);
ch = fgetc(fr);
Run Code Online (Sandbox Code Playgroud)

nos*_*nos 5

您正在为打开的FILE*分配NULL.

更改

if(fr = NULL){
Run Code Online (Sandbox Code Playgroud)

if(fr == NULL){
Run Code Online (Sandbox Code Playgroud)

  • 我还建议养成反转等价检查的习惯,以避免再次发生这种情况,即if(NULL == fr){ (3认同)
  • 它打印"fr open"的原因是因为你已经将`NULL`分配给`fr`,而`NULL`通常为零,因此为false.这是你经常看到人们写'if(!fr)`的原因之一,虽然我不完全确定这是否安全. (2认同)