2011-09-26 184 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