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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:40:32