我正在开发一个简单的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。有什么想法吗?
答案 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宏。