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

使用getline()读取命令行传入文件无输出,求代码问题排查

问题分析与修复:getline() 使用错误导致无输出

你的代码核心问题是错误地将n声明为size_t*类型的空指针,而getline()函数要求传入的是size_t类型变量的地址——用于存储缓冲区的大小。当你传入空指针时,getline()无法正确分配或使用缓冲区,直接导致读取失败,循环根本不会执行,自然没有任何输出。

修复步骤

  1. 将size_t *n = 0;修改为size_t n = 0;,把指针类型改成普通的size_t变量,初始化为0。
  2. 在getline()调用中,将第二个参数改为&n,传入变量n的地址,让getline()可以实时更新缓冲区的大小。

修复后的完整代码

#include <stdio.h>
#include <stdlib.h>

const char *READ = "r";

/**
 * main - Entry point of my program
 *
 * Return: On success, it returns 0. On
 * error it returns -1
 */
int main(int ac, char **av)
{
        FILE *fpointer;
        char *lineptr = NULL;
        size_t n = 0;
        int line_number = 1;

        if (ac != 2)
        {
                fprintf(stderr, "USAGE: monty file\n");
                exit(EXIT_FAILURE);
        }

        fpointer = fopen(av[1], READ);
        if (fpointer == NULL)
        {
                fprintf(stderr, "Error: Can't open file %s\n", av[1]);
                exit(EXIT_FAILURE);
        }
        while (getline(&lineptr, &n, fpointer) != -1)
        {
                printf("Line %d: %s", line_number, lineptr);
                line_number++;
        }

        // 释放getline自动分配的内存,避免泄漏
        free(lineptr);
        fclose(fpointer);
        return (0);
}

额外提示

  • getline()读取的行内容已经包含换行符,原代码里printf额外加\n会导致输出重复换行,建议去掉。
  • 记得用free()释放getline()分配的lineptr,以及用fclose()关闭文件指针,避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:20:31