如何使用fgets读取文件第二行?如何读取文件特定行?
使用fgets读取文件指定行的方法
假设目标文件内容如下:
Line 1
Line 2
Line 3
一、读取第二行的具体实现
要读取第二行,核心思路是先跳过第一行,再用fgets()读取第二行,代码示例如下:
#include <stdio.h> #include <stdlib.h> int main() { FILE *file = fopen("target.txt", "r"); if (file == NULL) { perror("无法打开文件"); return 1; } char buffer[256]; // 跳过第一行 if (fgets(buffer, sizeof(buffer), file) == NULL) { printf("文件行数不足2行\n"); fclose(file); return 1; } // 读取第二行 if (fgets(buffer, sizeof(buffer), file) != NULL) { printf("第二行内容:%s", buffer); } else { printf("文件行数不足2行\n"); } fclose(file); return 0; }
二、读取任意特定行的通用实现
如果要读取第N行(N为正整数),可以通过循环逐行读取并计数,直到到达目标行。需要处理文件行数不足N行的异常情况,代码示例如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> // 读取文件第line_num行,返回该行内容(需手动释放内存),失败返回NULL char* read_specific_line(const char *filename, int line_num) { if (line_num < 1) { printf("行号必须大于等于1\n"); return NULL; } FILE *file = fopen(filename, "r"); if (file == NULL) { perror("无法打开文件"); return NULL; } char buffer[256]; int current_line = 0; char *result = NULL; while (fgets(buffer, sizeof(buffer), file) != NULL) { current_line++; if (current_line == line_num) { // 分配内存存储该行内容 result = malloc(strlen(buffer) + 1); if (result != NULL) { strcpy(result, buffer); } break; } } if (current_line < line_num) { printf("文件行数不足%d行\n", line_num); free(result); result = NULL; } fclose(file); return result; } // 调用示例 int main() { char *line = read_specific_line("target.txt", 3); if (line != NULL) { printf("第三行内容:%s", line); free(line); } return 0; }
注意事项
fgets()会读取换行符\n并存储到缓冲区中,输出时会保留换行。- 要确保缓冲区大小足够容纳每行的内容,避免截断;如果行过长,需要额外处理。
- 所有动态分配的内存使用后要记得释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者fhaoebJebwoqbxoqh
相关产品推荐
相关产品推荐

