2016-02-03 84 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之前将输出切断。