
在C语言中,fgets函数用于从文件或标准输入读取一行文本,它的用法简单且高效。fgets的主要优点是安全、易用、适用于处理字符串输入的场景。接下来,我们详细讲解fgets的用法,并展示其在不同场景中的应用。
一、fgets函数的基本用法
fgets函数的基本原型如下:
char *fgets(char *str, int n, FILE *stream);
参数解释:
- str:指向存储输入字符串的字符数组。
- n:要读取的最大字符数,包括终止符( )。
- stream:输入流,可以是文件指针或标准输入(stdin)。
返回值:
- 成功时,返回str指针。
- 失败或到达文件末尾时,返回NULL。
二、从标准输入读取字符串
fgets常用于从标准输入读取一行文本,避免了常见的缓冲区溢出问题。
#include <stdio.h>
int main() {
char buffer[100];
printf("Enter a string: ");
if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
printf("You entered: %s", buffer);
} else {
printf("Error reading input.n");
}
return 0;
}
在这个例子中,我们定义了一个字符数组buffer,并使用fgets从标准输入读取一行文本。fgets会在读取到换行符或到达指定的字符数后停止读取,并自动添加终止符。
三、从文件中读取字符串
fgets也常用于从文件中读取数据,特别是逐行读取文件内容。
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("Failed to open file");
return 1;
}
char buffer[100];
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
fclose(file);
return 0;
}
在这个例子中,我们打开了一个名为"example.txt"的文件,并使用fgets逐行读取文件内容。fgets会在读取到换行符后停止,因此每次读取的字符串包含整行文本。
四、处理fgets返回的字符串
fgets读取的字符串通常包含换行符,处理这些换行符是必要的。
#include <stdio.h>
#include <string.h>
int main() {
char buffer[100];
printf("Enter a string: ");
if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
size_t len = strlen(buffer);
if (len > 0 && buffer[len - 1] == 'n') {
buffer[len - 1] = '