我正在开发一个简单的C程序来打开文件并从中读取一些数据。没有编译错误,但是当我在某个文件上运行程序时,我收到"分段错误:代码转储"错误。我在代码的最顶部插入了一个 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 是阀门映射文件,但它们采用标准文本格式。此文件的大小约为 3.7 KB。有什么想法吗?
您的代码不必在 printf
之前失败:对 printf
的调用可能已成功,但由于对控制台的输出是缓冲的,因此程序可能在输出写入屏幕之前崩溃。
向输出字符串添加n
会导致控制台缓冲区刷新。如果要按 printf
s 进行调试,则应始终将n
添加到格式字符串的末尾。
您的fopen
调用可能失败。在尝试使用 fp
之前,请尝试检查返回值:
FILE *fp;
char input[100];
if((fp = fopen(argv[1], "r+b") == NULL) {
fprintf(stderr, "ERROR: Cannot open file.n");
return 1;
}
请确保添加用于 NULL 宏的#include <stdlib.h>
。