C 尝试测试fgets()时出现分段错误

C 尝试测试fgets()时出现分段错误,c,segmentation-fault,fgets,C,Segmentation Fault,Fgets,我正试图编写一个程序来试验fgets()函数,我对它几乎没有经验。当我运行程序时,我不断地得到一个segmentation fault 11错误(但编译程序时没有错误),我对fgets的了解不够,不知道发生了什么。这是我的节目: #include <stdio.h> int main (void) { FILE *fp; fp = fopen("wageData.txt","r+"); char x[3][5]; int i = 0; whi

我正试图编写一个程序来试验fgets()函数,我对它几乎没有经验。当我运行程序时,我不断地得到一个segmentation fault 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;
}
#包括
内部主(空){
文件*fp;
fp=fopen(“wageData.txt”、“r+”);
char x[3][5];
int i=0;
而(i<3){
fgets(x[i],4,fp);
i++;
}
对于(i=0;i<3;i++){
printf(“%s\n”,x[i]);
}
返回0;
}
这是我链接到它的文本文件:

Hi, my name is Frank. I like pie. My car is black. 嗨,我叫弗兰克。 我喜欢吃馅饼。 我的车是黑色的。
我已经用您建议的数据构建并执行了您的代码,并且执行时没有错误。但是,您没有检查对
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;
}
#包括
内部主(空)
{
文件*fp=fopen(“wageData.txt”、“r+”);
如果(fp!=0)
{
char x[3][5];
int i=0;
int j;
char*check=0;
而(i<3&&fgets(x[i],4,fp)!=0)
{
i++;
}
对于(j=0;j
您必须检查fopen是否失败。请检查
fopen()的返回值。
。另外,
x[i]
的大小是5,您应该有
fgets(x[i],5,fp)
,或者更好的是,
fgets(x[i],sizeof(x[i]),fp)
。对于我来说,使用现有的可读的“wageData.txt”效果很好;尝试使用调试器或在某个
printf()
s获取更多信息。您还必须检查
fgets
是否失败
if(NULL==fgets(…){…}
oops我的糟糕抱歉分叉..应该先检查手册页