2014-02-27 49 views
0

在这个项目中我得到分割故障由于线路:正确使用fgets?

fgets(string , 50, in); 

如果我注释掉程序退出不错,但我不知道我在做什么错呢? 我检查了函数fgets的声明,该程序似乎很好。

//char *fgets(char *str, int n, FILE *stream) 


#include <stdio.h> 

int main(int argc, char const *argv[]) 
{ 
    FILE *in; 
    char string[100]; 

    in = fopen("in.txt", "r"); 

    // if i remove this line segmentation fault is no more. 
    fgets(string , 50, in); 

    fclose(in); 

    return 0; 
} 
+5

在使用'in'之前如何测试'fopen()'的结果?它可能会返回NULL。 –

+1

您可能还没有在您的目录中创建in.txt文件,fopen(“in.txt”,“w +”)会创建一个新文件。 – tesseract

回答

2

fopen()可能没有成功,请在尝试读取之前检查返回值。

+0

这很可能是正确的答案。如果fopen失败,你会返回一个NULL指针,然后fgets尝试对NULL指针进行操作。一个gegmentation错误是对这种事情的合理回应 – EvilTeach