仅使用stdio.h中的函数循环fgets语句

时间:2018-05-05 15:16:41

标签: c

让我们考虑以下代码段:

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循环中的条件而不添加 来自某个不同图书馆的任何功能

2 个答案:

答案 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