fgets与fputs函数实现文件的拷贝

一、函数

 

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

功能:从stream文件期望读取size个字符,保存在s内

返回:成功为s(缓存的首地址),文件结尾或者出错返回NULL。

注意:1、至多读取size-1个字符

2、遇到‘\n’或‘EOF’停止读取,并且换行符也会被读取

3、读取的末尾自动加‘\0’字符



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

功能:将s字符串写到stream文件内

返回:失败返回EOF(-1)

注意:遇到‘\0’字符结束输出

 

二、测试源码

 

#include <stdio.h>

#define N 5

int main(int argc, const char *argv[])
{
	if(argc < 3)
	{
		printf("argument is too less\n");
		return -1;
	}

	FILE *fp_r = fopen(argv[1], "r");
	if(fp_r == NULL)
	{
		printf("fp_r fopen error\n");
		return -1;
	}

	FILE *fp_w = fopen(argv[2], "w");
	if(fp_w == NULL)
	{
		printf("fp_w fopen error\n");
		return -1;
	}
	char buf[N]; 	

	while(fgets(buf, N, fp_r) != NULL)
	{
		//printf("buf = %s\n",buf);
		fputs(buf, fp_w);
	}
	printf("copy ok\n");

	fclose(fp_r);
	fclose(fp_w);
	
	return 0;
}

 

 

三、测试结果

 

 

 

四、关键代码分析

 

	while(fgets(buf, N, fp_r) != NULL)
	{
//		printf("buf = %s\n",buf);
		fputs(buf, fp_w);
	}

 

每次读取N个到buf中,然后使用fputs函数将buf中的内容写入到待拷贝的文件中。

结束标志为读到文件的末尾。

 

 

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int my_fputs(void)
{
	int		i       = 0;
	FILE *fp        = NULL;
	char *filename  = "./a.txt"; 
	char a[27]= "abcdefghijklmn";
	fp = fopen(filename, "w+");   //w+ 读写,创建,清空模式
	if (fp == NULL)
	{
		printf("func fopen() err!\n");
		return -1;
	}
	printf("打开成功\n");

	/*
	for (i=0; i<strlen(a); i++)
	{
		fputc(a[i], fp);
	}
	*/

	fputs(a, fp);
    
    if(NULL != fp)
	    fclose(fp);

    return 0;
}

int my_fgets(void)
{

	int		i       = 0;
	FILE *fp        = NULL;
	char *filename  = "./a.txt"; 
	char buf[1024];
	fp = fopen(filename, "r+"); //读和写方式
	if (fp == NULL)
	{
		printf("func fopen() err!\n");
		return -1;
	}
	printf("打开成功\n");

	//C 函数库 会 一行一行的copy数据 到buf指针所指的内存空间中 并且变成C风格的字符串
	//把\n也copy到我们的buf中
	//内存打包 (把内存首地址 + 内存的长度)
	while (!feof(fp))
	{
		char *p = fgets(buf, 1024, fp);
		if (p == NULL)
		{
			goto End;
		}	
		printf("%s", buf);
	}
End:
	if (fp != NULL)
	{
		fclose(fp);
	}

	return 0;
}


int main(int argc, const char * argv[])
{
	my_fputs();
    
	my_fgets();

    return 0;
}

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值