尝试测试 fgets() 时出现分段错误
Segmentation fault while trying to test fgets()
我正在尝试编写一个程序来试验 fgets() 函数,但我对它的经验很少。当我 运行 程序时,我一直收到分段错误 11 错误(但编译时没有错误),而且我对 fgets 的了解还不够,无法知道发生了什么。这是我的程序:
#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;
}
这是我链接到它的文本文件:
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;
}
我正在尝试编写一个程序来试验 fgets() 函数,但我对它的经验很少。当我 运行 程序时,我一直收到分段错误 11 错误(但编译时没有错误),而且我对 fgets 的了解还不够,无法知道发生了什么。这是我的程序:
#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;
}
这是我链接到它的文本文件:
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;
}