让我们考虑一下下面的代码片段:
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循环中的条件,而不需要从不同的库中添加任何函数
发布于 2018-05-05 23:24:18
当fgets
到达文件末尾并且没有读取任何字符时,它将返回NULL
,在错误情况下也是如此。当您取消引用fgets
的返回值时,当fgets
返回NULL
时,您将得到一个未定义的行为,这是导致程序崩溃的原因。您需要做的是只检查fgets
的返回值是否与NULL
不同
while (fgets(j, 10, fp) != NULL)
发布于 2018-05-05 23:22:29
是的,你应该在fgets
不返回空指针的时候循环。例如,while (fgets(...) != NULL)
。
如果您想要获取j
的第一个字符(这是*fgets(...)
将提供给您的),那么将其放入循环中:
n = j[0]; // Equal to n = *j
https://stackoverflow.com/questions/50190976
复制相似问题