c - 尝试测试 fgets() 时出现段错误

标签 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.

最佳答案

我已经使用您建议的数据构建并执行了您的代码,并且没有出现错误。但是,您没有检查对 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;
}

关于c - 尝试测试 fgets() 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787464/

相关文章:

python - gc 上的段错误,使用 ctypes

php - 如何消除 PHP 中 fgets 函数的换行符?

c++ - 了解 2^31 和 -2^31 整数提升

c - 来自 Programming in C 的函数参数声明问题,Stephen Kochan

c - 在 C 中分配二维数组

c - 即使在程序执行后仍显示段错误

c - scanf 之后 fgets 不起作用

c - 我如何知道输入是否是字母?我只能接受姓名中的字母和中间首字母的点

python - 如何在 OS X 中的 c 中嵌入特定版本的 python 解释器

c - 在 C 中使用 pow() 有问题