使用fgets从文件读取Seg Fault错误

时间:2013-02-12 01:43:35

标签: c fgets

//declare double pointer so that create array can "return" an array
int **aryReturn;
int size;
char trashdata[100];

//open file
FILE *inFilePtr = fopen(*(argv + 1), "r" );

if (inFilePtr != NULL)
    printf(" the value of argv 1 is %s \n", argv[1]); 

while (fgets(trashdata, sizeof(int) * 10, inFilePtr) != NULL){
    fgets(trashdata, 10, inFilePtr);
    size++;
}

任何人都可以告诉我为什么我的循环条件不起作用!我得到一个seg错误,在fgets上说fp(0x0)。 我试过了

while (!feof(inFilePtr))

我基本上得到同样的错误,但它说feof就是问题。

我的文件似乎打开正确,因为if语句打印..而argv具有预期的文件名

2 个答案:

答案 0 :(得分:1)

好吧,我看到了一些问题......

  • size未初始化
  • 连续两次调用gets()似乎很奇怪,请参阅feof()
  • 在针对NULL测试fopen()结果后你没有做任何事情,所以第一个gets()可能会因为这个原因而爆炸......你收到那条消息吗?

只有最后一件事似乎可能会引发异常,但我的理念始终是修复已知问题并重新测试 ...预测错误之间的相互作用是浪费时间。

答案 1 :(得分:0)

我认为您在参数中提供的文件名不存在或存在某些访问冲突。您可以在执行fopen命令后立即打印errno来检查这一点。

fprintf (stderr, "Couldn't open file %s; %s\n", argv[1], strerror (errno));

你也可以试一次这个代码:

#include<errno.h>
#include<stdio.h>
int main(int argc, char **argv)
{
    int **aryReturn;
    int size=0;
    char trashdata[100];

    //open file
    FILE *inFilePtr = fopen(*(argv + 1), "r" );

    printf(" the value of argv 1 is %s \n", argv[1]);
    if (inFilePtr == NULL)
    {
        fprintf (stderr, "Couldn't open file %s; %d\n", argv[1],errno);
        exit(0);
    }
    while (!feof(inFilePtr)){
    fgets(trashdata, 10, inFilePtr);
    printf("%s",trashdata);
    size++;
    }
}