使用fgets读取文件并在屏幕上打印其内容

我仍然认为自己是CI中的一个新的webby我试图读取文件,文件不是二进制,但它的大小从feb kbs的小尺寸到feb Mbs的大尺寸文件不等。我正在使用fgetsfunction,我已经参考了从这个链接,但编译后,我得到分段fault.i试图用gdb调试它,发现我能够打开文件,但无法读取。这是我的代码。

#include #define MAX_LENGTH 1048576 int main() { FILE *fp; char *result; char line[MAX_LENGTH]; fp =fopen("/home/shailendra/sampleprograms/C/shail1.txt","r"); if(result=fgets(line,MAX_LENGTH,fp) != NULL) printf("The string is %s \n",result); else printf("Error opening the file"); if(fclose(fp)) printf("fclose error"); } 

这个分段错误真的很糟糕。我明白这是由于内存分配不足但我使用了MAX_LENGTH 1048576,所以我不认为它必须造成任何问题。我曾用两个只有一行的小文件试过它和一个多行的大文件,但我无法弄清楚为什么我得到分段错误。

我也看了这个 ,但没有得到帮助。

尝试一些括号:

 if((result=fgets(line,MAX_LENGTH,fp)) != NULL) ^ ^ 

如果没有这些,您将存储比较结果而不是指向字符串的指针。


旁注:你根本不需要result 。 当它成功时, fgets返回你传入的指针; 换句话说,你可以只是printf line

 if(fgets(line, MAX_LENGTH, fp)) printf("The string is %s \n", line); 

第二面注意:在尝试从文件fgets之前,你应该检查fopen是否成功:

 if (!fp) perror("fopen"); 

除了cnicutar的答案之外还有几件事:

 #include  ^ Please make sure you have a space between your includes and the headers 

fgets将会读取,直到遇到新行或EOF(以先到者为准),所以要读取整个文件,你必须在循环中完成。

我建议这样做(不需要指出指针):

 while(fgets(line, MAX_LENGTH, fp)) printf("%s", line);