分段错误(核心转储)
Posted
技术标签:
【中文标题】分段错误(核心转储)【英文标题】:Segmentation Fault(core dumped) 【发布时间】:2013-10-16 10:38:40 【问题描述】:嘿,伙计们,我得到了这段代码:(我试图读取一个字符串并将其放入输出文件中)
#include "structs.h"
#include <stdio.h>
#include <stdlib.h>
int main ()
FILE* input = fopen("journal.txt", "r");
FILE* output = fopen("output.txt", "w");
char date[9];
if( ferror(input) || ferror(output) )
perror("Error opening input/output file\n");
fscanf(input, "%s", date);
fgets(date, 9, input);
fputs(date, output);
fclose(input);
fclose(output);
return 0;
它编译正确,但在运行时显示错误
Segmentation fault (core dumped)
我不知道为什么:(请帮忙
【问题讨论】:
如果文件无法打开,fopen
返回 NULL。你还没有检查这个。
如果你在*nix
,你可以使用gdb
你为什么先fscanf
ing 然后也 fgets
ing 到date
?
哦该死你是对的 Zeta 愚蠢的我有错误的文件名 -.- 谢谢你
下次在询问前使用调试器 =)
【参考方案1】:
你需要检查fopen
是否返回NULL
:
#include <stdio.h>
#include <stdlib.h>
int main ()
FILE * input;
FILE * output;
char date[9];
input = fopen("journal.txt", "r");
if(input == NULL)
perror("Could not open input file");
return -1;
output = fopen("output.txt", "w");
if(output == NULL)
perror("Could not open output file");
fclose(input);
return -1;
/* ... snip ... */
您的输入文件可能不存在。在 NULL
上调用 ferror
会导致分段错误。
【讨论】:
【参考方案2】: #include <stdio.h>
#include <stdlib.h>
int main ()
FILE* input = fopen("journal.txt", "r");
FILE* output = fopen("output.txt", "w");
char date[9];
if(input)
fscanf(input, "%s", date);
fgets(date, 9, input);
else
printf("error opening the file");
if(output)
fputs(date, output);
else
printf("error opening the file");
当您从一个不存在的文件“journal.txt”中读取并调用 Ferror 触发分段错误时,您收到了分段错误。
【讨论】:
以上是关于分段错误(核心转储)的主要内容,如果未能解决你的问题,请参考以下文章