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

如何使用fgets读取文本文件不同行,实现全文特定内容检索?

读取文本文件全内容的实现方案

fgets仅读取单行内容是该函数的正常设计:它的工作逻辑就是遇到换行符\n、缓冲区满、或者读到文件末尾时就停止读取,单次调用最多返回一行内容。要读取全文件内容匹配特定单词,可以用以下两种常用方案:

方案1:循环调用fgets逐行读取(适配大文件,推荐优先使用)

该方案不需要一次性加载整个文件到内存,哪怕是GB级别的大文件也可以正常处理,内存占用极低:

#include <stdio.h>
#include <string.h>

#define LINE_BUF_SIZE 1024 // 可根据实际最大行长度调整缓冲区大小

int main() {
    FILE *file = fopen("test.txt", "r");
    if (file == NULL) {
        perror("文件打开失败");
        return 1;
    }

    char line_buf[LINE_BUF_SIZE];
    int line_num = 0;
    const char *target_word = "目标单词"; // 替换为你要查找的单词

    // 循环读取每一行直到文件末尾
    while (fgets(line_buf, sizeof(line_buf), file) != NULL) {
        line_num++;
        // 对当前行做单词匹配
        if (strstr(line_buf, target_word) != NULL) {
            printf("第%d行匹配到目标单词:%s\n", line_num, line_buf);
        }
    }

    fclose(file);
    return 0;
}

方案2:一次性读取整个文件到内存(适合小文件,匹配效率更高)

如果文件体积不大,且需要处理跨换行的单词匹配场景,可以一次性把整个文件内容加载到内存中处理:

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

int main() {
    FILE *file = fopen("test.txt", "r");
    if (file == NULL) {
        perror("文件打开失败");
        return 1;
    }

    // 获取文件总字节数
    fseek(file, 0, SEEK_END);
    long file_size = ftell(file);
    fseek(file, 0, SEEK_SET);

    // 申请内存,多留1字节存储字符串结束符'\0'
    char *file_content = (char*)malloc(file_size + 1);
    if (file_content == NULL) {
        perror("内存申请失败");
        fclose(file);
        return 1;
    }

    // 读取整个文件内容到内存
    fread(file_content, 1, file_size, file);
    file_content[file_size] = '\0'; // 补全字符串结束符

    const char *target_word = "目标单词"; // 替换为你要查找的单词
    if (strstr(file_content, target_word) != NULL) {
        printf("文件中匹配到目标单词\n");
        // 可添加更多匹配结果处理逻辑
    }

    // 释放资源
    free(file_content);
    fclose(file);
    return 0;
}

注意事项

  • 如果待查找的单词存在跨两行的场景(比如前一行末尾是单词前半部分,换行后是后半部分),逐行读取方案需要额外做行尾和下一行开头的拼接处理,这种场景更适合一次性全量读取的方案。
  • 如果文本文件使用GBK、UTF-8等多字节编码,需要对应使用适配多字节编码的字符串匹配函数,避免乱码导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:45:06