文件输入输出函数:fgetc、fputc和fgets、fputs

一、fgetc函数和fputc函数

        (1)fgetc

        fgetc是C语言标准库中的一个函数,用于从文件中逐个读取字符。它接受一个文件指针作为参数,并返回已读取字符的编码(整数值),或者返回 EOF 表示文件末尾或发生了错误。

        函数原型为:

	int fgetc(FILE *stream);

    参数说明:

  • FILE *stream:指向要读取字符的文件的指针
  • int :返回值类型,如果成功读取到字符,则返回对应的字符编码(整数值);如果已到达文件末尾或发生了错误,则返回 EOF(通常被定义为 -1)。

        注意:fgetc()函数返回一个整数值,而不是字符本身,原因是它可以返回所有可能的字符,包括正常的字符和特殊字符,如换行符、制表符等等。

        (2)fputc函数

        fputc函数也是C语言标准库中的一个函数,用来将字符写入到程序中,它接受一个字符和一个文件指针作为参数,并返回已写入的字符(整数值),或者返回 EOF 表示发生了错误。

        函数原型为:

 int fputc(int c, FILE *stream);

        参数说明:

  • int c :要写入的字符,通过ASCII码转化为字符
  • FILE *stream:指向要写入字符的文件的指针。
  • int :返回值类型,如果成功写入字符,则返回写入的字符(整数值);如果发生了错误,则返回 EOF

        注意:  fputc函数接受的字符参数是一个整数值。这是因为它可以用于写入任意字符,包括正常的字符和特殊字符。如果传递给fputc函数的字符值超出了可表示范围,那么函数可能会发生未定义的行为。

        (3)应用

        通过fputc和fgetc函数,我们可以实现向文件中写入数据和读取数据,基于此,我们可以封装一个函数用来实现文件的拷贝。代码如下:

int MyFilecp(const char *filename_scr, const char *filename_dst)
{
	FILE *fp1;
	FILE *fp2;
	char c;

	fp1 = fopen(filename_scr,"r");
	if(NULL == fp1)
	{
		perror("fail to open filename_scr");
		return -1;
	}
	fp2 = fopen(filename_dst,"w");
	if(NULL == fp2)
	{
		perror("fail to open filename_dst");
		return -2;
	}

	while(1)
	{
		c = fgetc(fp1);
		if(c == EOF)
		{
			break;
		}
		fputc(c,fp2);
	}

	fclose(fp1);
	fclose(fp2);
	return 0;
}

二、fgets函数和fputs函数

(1)fgets函数

        fgets函数数是C语言标准库(stdio.h)中的一个输入函数,用于从文件或标准输入流读取一行文本(遇到‘\n’会立即停止)。函数原型为:

  char *fgets(char *s, int size, FILE *stream);

参数说明:

  • char *s :指向一个字符数组的指针,用于存储读取到的字符串。
  • size:最大读取字符数(包括换行符和空字符),不一定会读满size个字符,遇到'\n'会立刻停止,不再读取。
  • stream :指向FILE对象的指针,表示要从哪个文件流中读取数据。
  • char * :返回值类型,如果成功读取到了字符串,则返回指向该字符串首地址的指针;如果遇到了文件结束符(EOF),则返回 NULL;如果发生了错误,也返回 NULL,并且可以通过检查 feof 或 ferror 来确定是遇到了文件结束还是发生了错误。

        注意:fgets函数会读取每一行文本,包括换行符 \n,并将其存储在 str 指向的字符数组中,直到达到最大读取字符数 n 或者遇到换行符或文件结束符为止。如果所读取的行长度超过了 n-1,那么剩余的字符会被截断并丢弃。所以,使用 fgets() 函数可以安全地读取文本行,避免缓冲区溢出,并且保留换行符。但需要注意的是,fgets() 函数每次只能读取一行文本,不能逐个读取字符或单词。fgets()会在读取到的文本末端自动添加'\0'。

(2)fputs函数

         fputs() 函数是C语言标准库(stdio.h)中的一个输出函数,用于将一个字符串写入到文件或标准输出流。函数原型为:

  int fputs(const char *s, FILE *stream);

参数说明:

  • const char *str :要写入的字符串首地址。
  • stream:指向 FILE 对象的指针,表示要写入数据的文件流
  • int :返回值类型,如果成功写入字符串,则返回非负值,如果发生错误,则返回 EOF

        注意:fputs函数写入的操作不会自动添加换行符,所以如果需要换行,需要在字符串末尾显式添加换行符 \n

        (3)应用

        编写程序实现利用fgets和fputs实现文件内容拷贝。

#include<stdio.h>

int myFileCp(const char *filenameScr,const char *filenameDst)
{
	FILE *fpscr;
	FILE *fpdst;
	char line[1024];
	char *c;

	fpscr = fopen(filenameScr, "r");
	fpdst = fopen(filenameDst, "w");

	if (NULL == fpscr)
	{
		perror("fail to open scr");
		return -1;
	}
	if (NULL == fpdst)
	{
		perror("fail to open dst");
		return -2;
	}
	
	while(1)
	{
		c = fgets(line,sizeof(line),fpscr);
		if (NULL == c)
		{
			break;
		}
		fputs(line, fpdst);
	}

	fclose(fpscr);
	fclose(fpdst);
}

int main(void)
{
	char src[128];
	char dst[128];
	scanf("%s", src);
	scanf("%s", dst);
	myFileCp(src, dst);
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值