使用getline()读取命令行传入文件无输出,求代码问题排查
问题分析与修复:getline() 使用错误导致无输出
你的代码核心问题是错误地将n声明为size_t*类型的空指针,而getline()函数要求传入的是size_t类型变量的地址——用于存储缓冲区的大小。当你传入空指针时,getline()无法正确分配或使用缓冲区,直接导致读取失败,循环根本不会执行,自然没有任何输出。
修复步骤
- 将
size_t *n = 0;修改为size_t n = 0;,把指针类型改成普通的size_t变量,初始化为0。 - 在
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
相关产品推荐
相关产品推荐

