
C语言逐行读取txt文件的几种方法包括:使用fgets函数、使用getline函数、使用循环和字符读取的组合。 其中,使用fgets函数是最常用和简便的方法。下面将详细描述如何使用这些方法逐行读取txt文件。
一、使用fgets函数逐行读取
1.1 fgets函数的基本用法
fgets函数是C标准库中的一个函数,用于从文件中读取一行字符。其原型是:
char *fgets(char *str, int n, FILE *stream);
fgets函数读取最多n-1个字符(包括换行符),并将它们存储在str中,最后以null字符结束。stream是文件指针。
1.2 实现步骤
- 打开文件:使用
fopen函数打开要读取的文件。 - 逐行读取:使用
fgets函数读取文件中的每一行。 - 处理读取的行:对读取的行进行处理,例如输出到屏幕或存储到数据结构中。
- 关闭文件:使用
fclose函数关闭文件。
1.3 示例代码
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
char line[256];
while (fgets(line, sizeof(line), file)) {
printf("%s", line);
}
fclose(file);
return EXIT_SUCCESS;
}
在这个示例中,fgets每次读取一行并将其存储在line数组中,然后输出到屏幕。
二、使用getline函数逐行读取
2.1 getline函数的基本用法
getline函数是GNU C Library中的一个函数,用于从文件中读取一行字符。其原型是:
ssize_t getline(char lineptr, size_t *n, FILE *stream);
getline函数动态分配内存并读取一行字符,lineptr是指向读取行的指针,n是指向缓冲区大小的指针,stream是文件指针。
2.2 实现步骤
- 打开文件:使用
fopen函数打开要读取的文件。 - 初始化变量:初始化指向行指针的指针和缓冲区大小的变量。
- 逐行读取:使用
getline函数读取文件中的每一行。 - 处理读取的行:对读取的行进行处理,例如输出到屏幕或存储到数据结构中。
- 释放内存和关闭文件:释放分配的内存并关闭文件。
2.3 示例代码
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
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 EXIT_SUCCESS;
}
在这个示例中,getline函数会动态分配内存并读取每一行,然后输出到屏幕。
三、使用循环和字符读取的组合
3.1 基本思路
这种方法使用低级的字符读取函数,例如fgetc,手动逐字符读取文件,并判断换行符来确定行的结束。
3.2 实现步骤
- 打开文件:使用
fopen函数打开要读取的文件。 - 逐字符读取:使用
fgetc函数逐字符读取文件内容。 - 判断行结束:通过判断读取到的字符是否是换行符或文件结束符,确定一行的结束。
- 处理读取的行:对读取的行进行处理,例如输出到屏幕或存储到数据结构中。
- 关闭文件:使用
fclose函数关闭文件。
3.3 示例代码
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
char *line = malloc(256);
if (line == NULL) {
perror("Unable to allocate memory");
fclose(file);
return EXIT_FAILURE;
}
int ch;
size_t len = 0;
while ((ch = fgetc(file)) != EOF) {
if (ch == 'n' || len == 255) {
line[len] = '