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