C 尝试测试fgets()时出现分段错误
我正试图编写一个程序来试验fgets()函数,我对它几乎没有经验。当我运行程序时,我不断地得到一个segmentation fault 11错误(但编译程序时没有错误),我对fgets的了解不够,不知道发生了什么。这是我的节目:C 尝试测试fgets()时出现分段错误,c,segmentation-fault,fgets,C,Segmentation Fault,Fgets,我正试图编写一个程序来试验fgets()函数,我对它几乎没有经验。当我运行程序时,我不断地得到一个segmentation fault 11错误(但编译程序时没有错误),我对fgets的了解不够,不知道发生了什么。这是我的节目: #include <stdio.h> int main (void) { FILE *fp; fp = fopen("wageData.txt","r+"); char x[3][5]; int i = 0; whi
#include <stdio.h>
int main (void) {
FILE *fp;
fp = fopen("wageData.txt","r+");
char x[3][5];
int i = 0;
while (i < 3) {
fgets(x[i], 4, fp);
i++;
}
for (i = 0; i < 3; i++) {
printf("%s\n", x[i]);
}
return 0;
}
#包括
内部主(空){
文件*fp;
fp=fopen(“wageData.txt”、“r+”);
char x[3][5];
int i=0;
而(i<3){
fgets(x[i],4,fp);
i++;
}
对于(i=0;i<3;i++){
printf(“%s\n”,x[i]);
}
返回0;
}
这是我链接到它的文本文件:
Hi, my name is Frank.
I like pie.
My car is black.
嗨,我叫弗兰克。
我喜欢吃馅饼。
我的车是黑色的。
我已经用您建议的数据构建并执行了您的代码,并且执行时没有错误。但是,您没有检查对
fopen()
的调用是否成功,如果fp
不是有效的打开文件指针,它确实会中止
在这种情况下,我怀疑文件没有打开;可能它不在当前工作路径中,名称不正确(例如POSIX文件系统区分大小写),或者被锁定(可能在其他地方打开)
同样,明智的做法是检查fgets()
是否成功,以便它可以处理短于三行的文件:
#include <stdio.h>
int main(void)
{
FILE *fp = fopen("wageData.txt", "r+");
if( fp != 0 )
{
char x[3][5];
int i = 0;
int j ;
char* check = 0 ;
while( i < 3 && fgets(x[i], 4, fp) != 0 )
{
i++;
}
for( j = 0; j < i; j++)
{
printf("%s\n", x[j]);
}
}
else
{
printf( "File not opened.\n" ) ;
}
return 0;
}
#包括
内部主(空)
{
文件*fp=fopen(“wageData.txt”、“r+”);
如果(fp!=0)
{
char x[3][5];
int i=0;
int j;
char*check=0;
而(i<3&&fgets(x[i],4,fp)!=0)
{
i++;
}
对于(j=0;j
您必须检查fopen是否失败。请检查fopen()的返回值。
。另外,x[i]
的大小是5,您应该有fgets(x[i],5,fp)
,或者更好的是,fgets(x[i],sizeof(x[i]),fp)
。对于我来说,使用现有的可读的“wageData.txt”效果很好;尝试使用调试器或在某个printf()
s获取更多信息。您还必须检查fgets
是否失败if(NULL==fgets(…){…}
oops我的糟糕抱歉分叉..应该先检查手册页