我不确定为什么会这样,但我得到了一个"分段错误(核心转储)"从这个非常简单的代码。任何想法为什么?我必须使用一个字符串来告诉fopen()要打开哪个文件。
#include <stdio.h>
#include <string.h>
int main(void) {
char *small = "small.ppm";
FILE * fp;
char word[5];
fp = fopen(small, "r");
fscanf(fp, "%s", word);
printf("%s\n", word);
return 0;
}
答案 0 :(得分:2)
您的代码可以调用未定义的行为,替换为:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *small = "small.ppm";
FILE * fp = fopen(small, "r");
if (fp == NULL) {
perror("fopen()");
return EXIT_FAILURE;
}
char word[5];
if (fscanf(fp, "%4s", word) != 1) {
fprintf(stderr, "Error parsing\n");
return EXIT_FAILURE;
}
printf("%s\n", word);
}
答案 1 :(得分:1)
如果文件不存在,fp
将为NULL,因此fscanf(fp, ...)
会出现段错误。
检查所有文件操作是否成功非常重要。通常的模式就像......
FILE *fp = fopen(filename, "r");
if( fp == NULL ) {
fprintf(stderr, "Couldn't open %s: %s\n", filename, strerror(errno));
exit(1);
}