这是我的代码。
#include<stdio.h>
int main(int argc,char** argv)
{
FILE* fp;
fp=fopen(argv[1],"r");
struct element{
int value;
char activity;
};
typedef struct element element;
element a;
printf("%d",feof(fp));
}
现在,如果我不提供最后一个printf
命令,它不会给我一个分段错误,但是如果我给它printf
它会给我一个seg错误。为什么呢?
我得到了我的前一个问题的答案,现在我有另一个问题
我将.txt附加到我的makefile中的输入文件中。现在我有另一个问题。在命令上使它给出错误。
0make: *** [a.out] Error 1
为什么?
答案 0 :(得分:3)
检查fopen
的返回值(好吧,检查任何调用的返回值),它可能无法打开文件。
答案 1 :(得分:1)
因为您没有在命令行参数中指定文件,或者因为某些原因无法打开您指定的文件。在这种情况下,fopen
会返回NULL
,当您将NULL
传递给feof
时,它会导致程序崩溃。您必须检查返回值和错误代码,尤其是当函数可能返回NULL
时。
正确的代码可能如下所示:
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
FILE *fp;
if (argc < 2)
{
fprintf (stderr, "Please specify the file name.\n");
return EXIT_FAILURE;
}
fp = fopen(argv[1], "r");
if (fp == NULL)
{
perror ("Cannot open input file");
return EXIT_FAILURE;
}
printf ("%d\n", feof (fp));
return EXIT_SUCCESS;
}