2016-02-03 73 views
-2

我不斷收到分割錯誤。我發現它發生在這兩條線之間:C - 分割錯誤某處

  printf("%s - File exists!\n", file_name); 
      printf("inforloop"); 

但我不確定爲什麼分段錯誤一直在發生。 這是整個代碼:

#include<stdio.h> 
#include<unistd.h> 
#include<string.h> 

FILE *fp; 
char err_message[128], file_name[128]; 

int main(int argc, char *argv[]) 
{ 
    if(argc <= 2) 
    { 
     printf("ERROR : Usage %s <file name>\n", argv[0]); 
     return 1; 
    } 
    int i = 1; 
    for(i; i< argc; i++) 
    { 
     strcpy(file_name, argv[i]); 
     if ((access(file_name, F_OK)) != -1) 
     { 
      printf("begining of for loop\n"); 
      printf("%s - File exists!\n", file_name); 
      printf("inforloop"); 
      fclose(fp); 
     } 
     else 
     { 
      sprintf(err_message, "open %s", file_name); 
      perror(err_message); 
     } 
    } 
    return 0; 
} 

結果:

1 
begining of for loop 
date.txt - File exists! 
Segmentation fault (core dumped) 
+1

你沒有分配'fp'。 – user2357112

+1

看起來像C. C++是一種不同的語言。不要添加不相關的標籤。 – Olaf

+0

一個調試器會告訴你到底發生了什麼故障,並且將會更快(從長遠來看),然後使用SO作爲調試服務 - 即使你堅持使用原始GDB。 – Clifford

回答

4

fclose荷蘭國際集團fp,你從來沒有fopen版,甚至初始化。

因爲標準輸出是行緩衝的,並且在inforloop之後沒有換行,所以在打印inforloop之前將輸出切斷。