8

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

#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。有任何想法吗?

4

2 回答 2

22

您的代码之前没有必要失败printf:调用printf可能已经成功,但是因为控制台的输出是缓冲的,所以程序可能在输出写入屏幕之前就崩溃了。

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

于 2012-11-21T04:02:57.043 回答
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 宏以供使用。

于 2012-11-21T04:07:52.440 回答