You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

getline()与getdelim()是否可能返回0?

关于getline()和getdelim()返回值的疑问解答
  • 未到达文件末尾时,这两个函数可能读取0个字符
    当输入流的当前读取位置直接遇到指定分隔符时,getline()(默认分隔符为换行符\n)和getdelim()会消耗这个分隔符,但不会将其存入目标缓冲区,此时返回的读取字符数为0。这种情况不属于文件结束(EOF)或错误,是完全合法的正常行为。

    举个代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        char *buf = NULL;
        size_t buf_size = 0;
        ssize_t result;
    
        // 模拟输入流开头就是换行符的场景(比如通过`echo -e "\nabc"`输入)
        result = getline(&buf, &buf_size, stdin);
        printf("第一次调用getline返回值:%zd,读取内容:'%s'\n", result, buf);
        // 此时result为0,buf是空字符串(未读取到分隔符外的字符)
    
        result = getline(&buf, &buf_size, stdin);
        printf("第二次调用getline返回值:%zd,读取内容:'%s'\n", result, buf);
    
        free(buf);
        return 0;
    }
    

    运行后会看到第一次调用getline()返回0,这就是未到EOF但读取0字符的典型场景。

  • 绝对不能假设它们的返回值一定非零
    由于存在上述合法返回0的情况,代码中必须处理返回值为0的场景,不能默认返回值要么是正数要么是-1。忽略这种情况可能导致逻辑错误,比如跳过空行处理、错误判断流状态等。

内容的提问来源于stack exchange,提问作者raygard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:02:00