让我们考虑以下代码段:
int main()
{
printf("jkjkkjkj \n");
int p, n;
FILE *fp, *gp;
/*getchar();*/
printf("jkjkkjkj2 \n");
/*getchar();*/
fp = fopen("abc.txt","w");
printf("kjkj \n)");
fputs("chjkjkbu rey",fp);
fputs("bklklbu1234rey ",fp);
/*fputs("chuhibu rey ",fp);*/
printf("kjkj2 \n)");
n = fclose(fp);
printf("kjkj3 \n)");
fp = fopen ("abc.txt","r");
printf("kjkj4 \n)");
char j[20];
printf("kjkj5 \n)");
n = *(fgets(j,12,fp));
printf ("moron \n");
printf("... %s",j);
printf("\n marun");
while (n = *(fgets(j,10,fp)))
{
printf("kjkj5.5 \n)");
/*fgets(j, 10, fp);*/
printf("it's... %s \n", j);
printf("kjkj6 \n)");
/*j = n;*/
printf("kjkj7 \n)");
printf( "the chareacter here is %c \n", n);
printf("kjkj8 \n)");
}
n = fclose(fp);
return 0;
}
现在我想逐行读取文件但是我会在文件结束的行中出现分段错误。 (如果
,请忽略编译错误我想知道我是否可以修改while循环中的条件而不添加 来自某个不同图书馆的任何功能
答案 0 :(得分:4)
当fgets
到达文件末尾并且没有读取任何字符时,它将返回NULL
,并且在错误情况下也是如此。当您取消引用fgets
的返回值时,fgets
返回NULL
时会出现未定义的行为,这是程序崩溃的原因。您需要做的是,只检查fgets
的返回值是否与NULL
不同:
while (fgets(j, 10, fp) != NULL)
答案 1 :(得分:1)
是的,你应该在fgets
没有返回空指针时循环。例如。 while (fgets(...) != NULL)
。
如果你想得到j
的第一个字符(这是*fgets(...)
会给你的),那么把它放到循环中:
n = j[0]; // Equal to n = *j