繁体   English   中英

使用fgets从文件读取段错误错误

[英]Seg Fault error reading from file with 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++;
}

谁能告诉我为什么我的循环条件不起作用! 我在fgets遇到段错误,提示fp(0x0)。 我努力了

while (!feof(inFilePtr))

而且我基本上得到了相同的错误,但是它说feof是问题所在。

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

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

  • size未初始化
  • 连续两次调用gets()似乎很奇怪,请参阅feof()
  • 在针对NULL测试了fopen()结果之后,您什么也不做,因此第一个gets()可能会因为这个原因而被炸毁……您是否得到了该消息?

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

我认为您在参数中提供的文件名不存在或存在某些访问冲突。 您可以在执行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++;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM