文章目录
- 前言
- 一、fputs函数
- 二、fgets函数
- 三、fputc和fgetc函数
- 总结
前言
本篇文章我们来讲解一下fgets和fputs函数,这两个函数通常用来作为输入和输出功能使用。
一、fputs函数
fputs函数是C语言标准库中的一个输出函数,用于将字符串写入到指定的文件中。它的原型如下:
int fputs(const char* str, FILE* stream);
fputs函数将字符串 str 写入到指定的文件流 stream 中。
参数说明:
str:要写入的字符串,以空字符 \0 结尾。
stream:指向要写入的文件流的指针,可以是文件也可以是标准输出 stdout。
fputs函数将字符串写入文件中,直到遇到空字符 \0 结束。它会返回以下两个值之一:
如果成功写入字符串,返回非负值。
如果发生错误,则返回 EOF(表示文件末尾)。
以下是一个示例代码,演示如何使用fputs函数将字符串写入文件:
#include <stdio.h>
int main(void)
{
FILE* file;
errno_t err;
char line[50];
// 打开文件进行写操作
err = fopen_s(&file, "example.txt", "w");
if (err != 0) {
printf("无法打开文件进行写操作。\n");
return 1;
}
// 向文件中写入数据
fputs("Hello, World!\n", file);
fputs("This is an example.\n", file);
fclose(file);
return 0;
}
运行后字符成功被写入文件中:
将字符串写入stdout输出流中:
// 向文件中写入数据
fputs("Hello, World!\n", stdout);
fputs("This is an example.\n", stdout);
二、fgets函数
fgets 函数是C语言标准库中的一个输入函数,用于从文件中按行读取数据或从标准输入(键盘)读取数据。它的原型如下:
char* fgets(char* str, int num, FILE* stream);
fgets 函数从指定的文件流(或标准输入流)中读取一行数据,并将其存储到指定的字符数组 str 中。它最多读取 num-1 个字符(包括换行符 \n),并在字符串末尾添加一个空字符 \0。
参数说明:
str:指向字符数组的指针,用于存储读取的数据。
num:要读取的最大字符数(包括换行符)。
stream:指向要从中读取数据的文件流指针,可以是文件也可以是标准输入 stdin。
fgets 函数按行读取数据,直到满足以下条件之一:
已读取了 num-1 个字符(包括换行符 \n),达到了最大字符数。
遇到换行符 \n,表示读取了一行数据。
读取到文件结尾(EOF)或发生错误。
fgets 函数返回一个指向字符串 str 的指针,即成功读取的数据的起始位置。如果无法读取数据或到达文件结尾,fgets函数将返回 NULL。
#include <stdio.h>
int main(void)
{
FILE* file;
errno_t err;
char line[50];
// 打开文件进行写操作
err = fopen_s(&file, "example.txt", "w");
if (err != 0) {
printf("无法打开文件进行写操作。\n");
return 1;
}
// 向文件中写入数据
fputs("Hello, World!\n", file);
fputs("This is an example.\n", file);
fclose(file);
// 打开文件进行写操作
err = fopen_s(&file, "example.txt", "r");
if (err != 0) {
printf("无法打开文件进行写操作。\n");
return 1;
}
while ((NULL != fgets(line, 50, file)))
{
printf("buf : %s", line);
}
return 0;
}
运行结果:
注意:fgets函数读取完一行后将会覆盖之前读取到的数据,如果需要对读取到的数据进行处理的话,那么需要先把数据保存到其他数组当中。
使用fgets循环读取输入数据:
while ((NULL != fgets(line, 50, stdin)))
{
printf("length : %d\n", strlen(line));
printf("buf : %s", line);
}
运行结果:
三、fputc和fgetc函数
当涉及读取和写入单个字符时,使用 fputc 和 fgetc 是常见的方法。这两个函数用于从文件中读取或写入单个字符。
fputc 函数:
函数原型: int fputc(int c, FILE *stream)
作用:将一个字符 c 写入到指定文件流 stream 中。
返回值:若成功则返回写入的字符 c,若发生错误则返回 EOF(-1)。
fgetc 函数:
函数原型: int fgetc(FILE *stream)
作用:从指定文件流 stream 中读取一个字符。
返回值:若成功则返回读取的字符,若发生错误或到达文件结尾则返回 EOF(-1)。
#include <stdio.h>
int main() {
FILE *file;
int ch;
// 打开文件
file = fopen("example.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 使用 fgetc 逐字符读取文件内容并打印
while ((ch = fgetc(file)) != EOF) {
printf("%c", ch);
}
// 关闭文件
fclose(file);
return 0;
}
上述示例打开名为 example.txt 的文件,并使用 fgetc 函数逐字符读取文件内容,并通过 printf 函数打印到控制台。当到达文件结尾时,fgetc 函数将返回 EOF(-1),循环终止,文件关闭。
总结
本篇文章主要讲解了fgets和fputs的使用,这两个函数主要用于输入和输出使用,以及讲解了fputc和fgetc的使用。