C 语言中,读取文件内容通常使用标准 I/O 函数,如 fgetc()、fgets() 和 fread()。对于按行读取文件,fgets() 是一个非常常用的函数,它可以逐行读取文件内容。使用 fgets() 适用于简单的逐行读取文件的情况,你需要事先分配一个字符数组并限制每次读取的最大字符数。使用 getline() 适合不确定文件每行的最大长度,或者希望动态分配内存,可以使用 getline()。它可以根据文件内容自动调整缓冲区的大小。

1、使用 fgets() 逐行读取文件

fgets() 是一个非常常见的读取文件逐行数据的函数。它会读取一行并将其存储在提供的字符数组中,直到达到指定的最大字符数,或者遇到换行符或文件结尾。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");  // 打开文件以读取
    if (file == NULL) {
        perror("Unable to open file");
        return 1;
    }

    char line[256];  // 用于存储每一行的字符数组

    // 按行读取文件
    while (fgets(line, sizeof(line), file)) {
        printf("%s", line);  // 输出每一行
    }

    fclose(file);  // 关闭文件
    return 0;
}

fgets() 会保留换行符,因此每一行的结尾可能包含一个换行符。如果不想要换行符,可以在处理时去除它。

line[strcspn(line, "\n")] = 0; // 去掉换行符

2、使用 getline() 逐行读取文件(如果支持)

getline() 是 POSIX 标准中的一个函数,它比 fgets() 更灵活,可以动态分配缓冲区。这个函数会自动调整内存大小来存储每一行,因此它不需要你事先指定缓冲区的大小。

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

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Unable to open file");
        return 1;
    }

    char *line = NULL;
    size_t len = 0;
    ssize_t read;

    // 按行读取文件
    while ((read = getline(&line, &len, file)) != -1) {
        printf("%s", line);  // 输出每一行
    }

    free(line);  // 释放分配的内存
    fclose(file);
    return 0;
}

3、使用 fscanf() 逐行读取文件

使用 fscanf 按行读取文件,可以通过循环读取每一行直到文件结束。通常可以配合 while 循环使用,确保每次读取文件的一行内容。

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[1024]; // 缓冲区,用于存储每一行

    // 打开文件
    if ((file = fopen("input.txt", "r")) == NULL) {
        printf("无法打开文件!\n");
        return -1;
    }

    while (fscanf(buffer, "%s\n") != EOF) { // 读取一行,并包含换行符
        char *line = buffer; // 获取当前行的指针
        int line_strlen = strlen(line); 

        // 处理这一行(根据需求)
        printf("读取行:");
        printf("\n\t"); // 可以替换为任何处理操作

        // 清空缓冲区
        memset(buffer, 0, sizeof(buffer));
    }

    fclose(file); // 关闭文件
    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表