2011-09-26 130 views
1

这是我的代码。分段错误

#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它给了我一个赛格故障。为什么?

我回答了我的上一个问题,现在我有一个问题

我曾经的.txt追加到我的输入文件中的makefile我。现在我有另一个问题。在命令使它给错误。

0make: *** [a.out] Error 1 

为什么?

+0

fopen()函数失败,因此返回0? –

回答

3

检查的fopen返回值(当然,检查任何调用的返回值),则可能无法打开该文件。

+0

是的,我有.txt附加在我的生成文件。 现在我有另一个问题。 on command 'make' 它给出错误。 0make:*** [a.out]错误1为什么? – Kraken

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; 
} 
+0

请检查答案。感谢你的回答。 – Kraken