第一行代码之前的分段错误

时间:2012-11-21 03:59:59

标签: c io segmentation-fault

我正在开发一个简单的C程序来打开文件并从中读取一些数据。没有编译错误,但是当我在某个文件上运行程序时,出现“Segmentation Fault:code dumped”错误。我在代码的最顶部插入了一个print语句,但它没有运行。当你还没有做任何事情时,是否有可能出现分段错误?

#include <stdio.h>


int main(int argc, char **argv)
{
    printf("%s", "Made it to here!");
FILE *fp;   
char input[100];
fp = fopen(argv[1], "r+b");
fgets(input, sizeof(input), fp);
printf("%s", input);
fclose(fp);
return(0);

}

当我在自身的文本版本上运行它时,它会打印出第一行。但是,当我在另一个文件texttest.vmf上运行它时,我得到分段错误,第一个打印不执行。 VMF是Valve Map Files,但它们是标准文本格式。这个文件大约3.7 KB。有什么想法吗?

2 个答案:

答案 0 :(得分:19)

printf之前您的代码没有必要失败:对printf的调用可能已成功,但由于输出到控制台是缓冲,程序可能会有在输出写入屏幕之前崩溃。

\n添加到输出字符串会导致控制台缓冲区刷新。如果您希望按printf进行调试,则应始终将\n添加到格式字符串的末尾。

答案 1 :(得分:1)

您的fopen电话可能会失败。在尝试使用fp

之前,请尝试检查返回值
FILE *fp;   
char input[100];
if((fp = fopen(argv[1], "r+b") == NULL) {
  fprintf(stderr, "ERROR: Cannot open file.\n");
  return 1;
}

确保添加#include <stdlib.h>以使用NULL宏。