C语言如何从文本文件中打印指定行内容?是否需要使用数组?
C语言读取文本文件指定行的实现方案
功能可行性说明
C语言完全可以实现从文本文件中读取并打印指定行内容,仅依赖标准库<stdio.h>就能完成,无需引入其他第三方组件。
数组使用说明
实现该功能不需要强制使用数组,可以根据使用场景选择两种实现思路:
思路1:不使用数组(大文件/行长度不确定场景优先)
该方案仅通过逐字符遍历计数定位目标行,内存开销极低,也不会出现行长度溢出问题。
示例代码:
#include <stdio.h> #include <stdlib.h> #define TARGET_LINE 5 // 替换为实际需要打印的行号,默认行号从1开始计数 int main() { FILE *fp = fopen("test.txt", "r"); if (fp == NULL) { perror("文件打开失败"); return EXIT_FAILURE; } int current_line = 1; int ch; // 跳过目标行之前的所有内容 while (current_line < TARGET_LINE) { ch = fgetc(fp); if (ch == '\n') { current_line++; } else if (ch == EOF) { printf("文件总行数不足,不存在第%d行\n", TARGET_LINE); fclose(fp); return EXIT_FAILURE; } } // 打印目标行内容 while ((ch = fgetc(fp)) != EOF && ch != '\n') { putchar(ch); } putchar('\n'); fclose(fp); return EXIT_SUCCESS; }
思路2:使用数组(行长度可控场景优先)
如果提前可以确定文件的最长行长度,用数组存储每行内容的方案代码更简洁、可读性更高。
示例代码:
#include <stdio.h> #include <stdlib.h> #define TARGET_LINE 5 #define MAX_LINE_LEN 1024 // 按文件实际最大行长度调整,避免内容截断 int main() { FILE *fp = fopen("test.txt", "r"); if (fp == NULL) { perror("文件打开失败"); return EXIT_FAILURE; } char line_buf[MAX_LINE_LEN]; int current_line = 1; while (fgets(line_buf, MAX_LINE_LEN, fp) != NULL) { if (current_line == TARGET_LINE) { printf("%s", line_buf); break; } current_line++; } if (current_line < TARGET_LINE) { printf("文件总行数不足,不存在第%d行\n", TARGET_LINE); } fclose(fp); return EXIT_SUCCESS; }
注意事项
- 上述示例默认行号从1开始计数,如果需要从0开始计数,调整
current_line的初始值即可 - 使用数组方案时如果行长度超过
MAX_LINE_LEN的配置,会出现行内容截断问题,该场景下优先选用无数组的逐字符遍历方案 - 文件操作完成后必须调用
fclose释放文件指针,避免资源泄漏
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

