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

C语言getline()读取文件最后一行重复两次问题如何解决?

C语言getline读取文件最后一行重复问题解决

问题原因

  • 执行逻辑顺序错误:你在循环体中先执行getline读取新行再执行打印,当getline读到文件末尾时会返回-1,但此时存储行内容的line缓冲区不会被修改,仍然保留最后一次成功读取的内容,代码没有校验本次读取是否成功就直接打印,就会触发最后一行重复输出的问题。同时循环外的首次getline读取的第一行内容会被循环内的首次getline覆盖,导致首行内容丢失。
  • 校验时机不匹配:你当前的while循环条件校验的是上一次getline的返回结果,和本次循环要处理的内容不对应,无法拦截到读取失败的情况。

修复方案

调整读取、校验、处理的顺序,将getline读取和返回值校验直接放在while循环条件中,保证只有读取成功时才进入循环体处理内容,同时补充内存释放逻辑避免泄漏,修改后代码如下:

char *line = NULL;
size_t line_buf_size = 0;
ssize_t line_size;
int row = 0;

// 读取后立刻校验,仅读取成功才进入循环处理
while ((line_size = getline(&line, &line_buf_size, stdin)) >= 0) {
    row++;
    printf("%s", line);
}

// 释放getline动态分配的缓冲区
free(line);
line = NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:18:01