0
//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 具有预期的文件名

4

2 回答 2

1

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

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

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

于 2013-02-12T01:53:54.060 回答
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++;
    }
}
于 2013-02-12T05:12:13.217 回答