C语言如何按行读取整个文件内容
在C语言中,按行读取整个文件内容的常用方法包括:使用fgets函数、使用fgetc函数、使用getline函数。fgets函数适合读取指定长度的字符串、fgetc函数适合逐字符读取、getline函数则适合动态分配内存的读取。我们将详细介绍使用fgets函数来读取文件内容。
一、使用fgets函数读取文件内容
1.1 基本概念和使用方法
fgets
函数从文件流中读取一行字符,并将其存储在指定的字符数组中。其函数原型如下:
char *fgets(char *str, int n, FILE *stream);
- str:指向存储读取内容的字符数组。
- n:读取的最大字符数(包括终止字符)。
- stream:指向文件流的指针。
1.2 示例代码
以下是使用fgets
函数按行读取文件内容的示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file;
char line[256];
file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return -1;
}
while (fgets(line, sizeof(line), file)) {
printf("%s", line);
}
fclose(file);
return 0;
}
在这个示例中,我们首先打开一个名为example.txt
的文件。如果文件打开失败,程序会输出错误信息并返回-1。然后,使用fgets
函数逐行读取文件内容,并将每行打印到标准输出。最后,关闭文件以释放资源。
二、使用fgetc函数读取文件内容
2.1 基本概念和使用方法
fgetc
函数逐字符读取文件内容,并返回读取的字符。其函数原型如下:
int fgetc(FILE *stream);
- stream:指向文件流的指针。
2.2 示例代码
以下是使用fgetc
函数按行读取文件内容的示例代码:
#include <stdio.h>
int main() {
FILE *file;
int ch;
file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return -1;
}
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
fclose(file);
return 0;
}
在这个示例中,我们使用fgetc
函数逐字符读取文件内容,并使用putchar
函数将读取的字符输出到标准输出。读取到文件末尾时,fgetc
函数返回EOF
(文件结束标志),循环结束并关闭文件。
三、使用getline函数读取文件内容
3.1 基本概念和使用方法
getline
函数从文件流中读取一行字符,自动分配内存以适应读取的内容。其函数原型如下:
ssize_t getline(char lineptr, size_t *n, FILE *stream);
- lineptr:指向存储读取内容的字符指针的指针。
- n:指向存储缓冲区大小的变量的指针。
- stream:指向文件流的指针。
3.2 示例代码
以下是使用getline
函数按行读取文件内容的示例代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *file;
char *line = NULL;
size_t len = 0;
ssize_t read;
file = fopen("example.txt", "r");
if (file == NULL) {
perror("Error opening file");
return -1;
}
while ((read = getline(&line, &len, file)) != -1) {
printf("%s", line);
}
free(line);
fclose(file);
return 0;
}
在这个示例中,我们使用getline
函数按行读取文件内容。getline
函数自动分配内存以适应读取的内容,并将其存储在line
指针指向的缓冲区中。读取到文件末尾时,getline
函数返回-1,循环结束并释放内存,关闭文件。
四、实战应用:读取配置文件
4.1 配置文件格式
假设我们有一个简单的配置文件config.txt
,内容如下:
name=John Doe
age=30
email=johndoe@example.com
4.2 使用fgets读取配置文件
以下是使用fgets
函数读取配置文件内容,并解析配置项的示例代码:
#include <stdio.h>
#include <string.h>
void trim_newline(char *str) {
size_t len = strlen(str);
if (len > 0 && str[len-1] == 'n') {
str[len-1] = '