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; }