C语言对文件 *** 作,用fputs函数不能把字符串写入文件?

C语言对文件 *** 作,用fputs函数不能把字符串写入文件?,第1张

读写一个字符数据链和坦

经过前面的学习,我们学习了fread()、fwrite()函数的 *** 作,这两个函数都是对一段“内存块”进行读写 *** 作。那么,C语言还提供了fgetc()、fputc()函数,对文件中的一个字符进行读写 *** 作。这些函数的定义如下:

int fgetc(FILE *stream)

函数说明:从stream文件指针所指向的文件读取1个字符,通过函数的返回值返回。例如:

char c = fgetc(fp)

就是从fp指向的文件,读取1个字符的数据,通过函数返回值,设置给字符变量c。

int fputc(int c, FILE *stream)

函数说明:把参数c表示的字符,写入stream文件指针所指向的文件。例如:

char c = 'M'

fputc(c, fp)

就是把参数c表示的字符变量,写入文件指针fp指向的文件。如下是一个程序测试例子:

可以看到,新建一个test.txt文件,调用棚游fputc()函数,把一个字符写入到文件中。然后,再重新打开文件,读取文件的数据,调用fgetc()函数读取一个字符,得到的数据是刚刚写入的字符。所以,通过这个例子,我们学习了fgetc()、fputc()函数的 *** 作,对文件进行一个字符的读写 *** 作。

3.5 读写一行字符数据

C语言提供了fgets()、fputs()函数对文件进行读写“一行”的数据,字符串以'\n'字符换行,注意,所谓的“一行”数据,它的最后一个有效字符是’\n’,表示换行符号。字符串的结束符,还是以’\0’为结尾,表示字符串结束符。其中fgets()函数的定义如下:

char *fgets(char *buf, int size, FILE *stream)

函数说明:从stream函数指针所指向的文件中,读取size-1个字节到buf缓存,不是读取size个字节,因为,buf[ ]缓存的第size个字节存放字符串结束符,形成一个有效的字符串。

当读取到换行符时,或者到达文件末尾时,结束文件的读取 *** 作。

返回值:读取数据成功,返回存储数据的缓存地址,就是参数buf的地址。如果读取数据失败,返回NULL。例如,读取文件完,没有数据可以再读取,则返回NULL。

int fputs(const char *buf, FILE *stream)

函数说明:把参数buf指针指向的字符串,写入到stream指向的文件。参数buf是一个字符串指针,必须指向一个合法的字符串。合法的字符串是以字符串结束符'\0'结束,表示一个字符串的结尾。

返回值:写入数据成功,返回成功写入的字符个数。失败返回EOF标记。

如下是一个程序测试例子:

程序运行结果如下:

可以看到,程序调用fputs()函数,往打开的test.txt文件写入数据。直接写入一个字符串。然后,关闭文件,再重新打开文件。调用fgets()函数读取数据,读取数据的时候,遇到回车换行的字符'\n',表示一行数据,那么,就返回读取到的一行数据。

在实际的项目开发过程中,fgets()函数非常有用。例如,我们定义一个config.txt文件,棚桐里面存放一些系统的配置信息,文件的格式如下:

cat /etc/config.txt

sys_pwd=123456

ApCliAuthMode=WPA2PSK

ApCliEncrypType=AES

ApCliChannel=1

ApCliDefaultKeyID=1

那么,文件的配置信息是一行一行数据,所以,可以用fgets()函数,快速读取出每一行系统配置信息。

以下是一个C语言程序示例,它使用fgets()和fputs()函数将D盘下的文件pro.txt复制到pc.txt中:

#include <stdio.h>

#define BUFFER_SIZE 256

int main() {

FILE *src, *dest

char buffer[BUFFER_SIZE]

// 打开源文件

src = fopen("D:\\pro.txt", "r")

if (src == NULL) {

printf("无法打开源文件\n")

return 1

}

// 打开目标文件

dest = fopen("pc.txt", "w")

if (dest == NULL) {

printf("无法创建目标文件\n")

fclose(src)

return 1

}

// 逐行读取并复制源文件

while (fgets(buffer, BUFFER_SIZE, src) != NULL) {

fputs(buffer, dest)

}

// 关闭文件

fclose(src)

fclose(dest)

printf("文件复制成功\n")

return 0

}

在这个程序中,我们首先定义了一个BUFFER_SIZE常量,用于存储每次读取的行的最大长度。然后,我们使用fopen()函数打开源文敬缓件D:\pro.txt,如果无法打开,则输出错误信息并退出程序。

接下来,我们使用fopen()函数创建目标文件姿稿梁pc.txt,如果无法创建,则输出错误信息并关闭源文件,并退出程序。

然后,我们使用fgets()函数逐行读取源文件,并使用fputs()函数将读取的行写入目标文件。我们循环执行此过程,直到读取完整个文件。

最后,我们使用fclose()函数关闭源文件迹运和目标文件,输出“文件复制成功”消息,并退出程序。

需要注意的是,在使用fopen()函数打开文件时,需要指定正确的路径和访问模式。"r"表示只读模式,"w"表示写入模式。如果文件无法打开或创建,则需要在 *** 作完成后关闭文件,并退出程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12273876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存