首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅使用stdio.h中的函数循环fgets语句

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

Stack Overflow用户
提问于 2018-05-05 23:16:41
回答 2查看 60关注 0票数 0

让我们考虑一下下面的代码片段:

代码语言:javascript
运行
复制
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循环中的条件,而不需要从不同的库中添加任何函数

EN

回答 2

Stack Overflow用户

发布于 2018-05-05 23:24:18

fgets到达文件末尾并且没有读取任何字符时,它将返回NULL,在错误情况下也是如此。当您取消引用fgets的返回值时,当fgets返回NULL时,您将得到一个未定义的行为,这是导致程序崩溃的原因。您需要做的是只检查fgets的返回值是否与NULL不同

代码语言:javascript
运行
复制
while (fgets(j, 10, fp) != NULL)
票数 4
EN

Stack Overflow用户

发布于 2018-05-05 23:22:29

是的,你应该在fgets不返回空指针的时候循环。例如,while (fgets(...) != NULL)

如果您想要获取j的第一个字符(这是*fgets(...)将提供给您的),那么将其放入循环中:

代码语言:javascript
运行
复制
n = j[0];  // Equal to n = *j
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50190976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档