尝试测试fgets时的分段错误()

时间:2015-06-11 17:25:12

标签: c segmentation-fault fgets

我正在尝试编写一个程序来试验fgets()函数,我很少有经验。当我运行程序时,我不断收到分段错误11错误(但编译时没有错误),而且我不知道fgets知道发生了什么。这是我的计划:

#include <stdio.h>

int main (void) {
    FILE *fp;
    fp = fopen("wageData.txt","r+");
    char x[3][5];
    int i = 0;
    while (i < 3) {
        fgets(x[i], 4, fp);
        i++;
    }

    for (i = 0; i < 3; i++) {
        printf("%s\n", x[i]);
    }

    return 0;
}

这是我链接到它的文本文件:

Hi, my name is Frank.  
I like pie.  
My car is black.

1 个答案:

答案 0 :(得分:2)

我使用您建议的数据构建并执行了您的代码,并且执行时没有错误。但是,您不会检查对fopen()的调用是否成功,如果fp不是有效的打开文件指针,则确实会中止。

我怀疑在那种情况下文件没有打开;也许它不是在当前的工作路径中,被错误地命名(例如POSIX文件系统是区分大小写的),或者被其他方式锁定(可能在其他地方打开)。

同样,检查fgets()的成功是否明智,以便它可以使用短于三行的文件:

#include <stdio.h>

int main(void) 
{
    FILE *fp = fopen("wageData.txt", "r+");
    if( fp != 0 )
    {
        char x[3][5];
        int i = 0;
        int j ;
        char* check = 0 ;
        while( i < 3 && fgets(x[i], 4, fp) != 0 ) 
        {
            i++;
        }

        for( j = 0; j < i; j++) 
        {
            printf("%s\n", x[j]);
        }
    }
    else
    {
        printf( "File not opened.\n" ) ;
    }

    return 0;
}