[英]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()
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.