fgets()和fputs()使用注意

gets()与fgets()区别

gets()是标准IO文件下面。传过一个字符串的地址。

          永远不要使用这个函数,这个函数不检查边界。因为我们没有把数据输入到约定的地址上,而是输入到输入缓冲区上,并且我们并不知道输入大小。当我们回车的时候,可能造成输入缓冲区溢出。所以我们用fgets()。

fgets() 参数需要给定一个字符串的位置,然后字符串的的大小,和一个文件流。

fgets()读取比最大字符少一个字符的字符串从文件流中。最后一个字符用空格替代

如果定义了读取五个字符

而文本流只有abcd四个字符那需要读取多少次呢?

第一次abcd'\0'

第二次'\n''\0'

因为最后一个字符用空格替代,输入队列里有一个'\n',第二次需要读取'\n'。

 fgets()如果成功则返回s,如果失败则返回的是一个NULL指针。

puts()和fputs()

 

 

 

 我们看到puts()给定一个地址,然后把地址内容传递到标准输出流中。而fputs()可以指定输出的流对象。

以下代码完成拷贝动作。

代码示例:

#include<stdio.h>
#include<stdlib.h>
#define BUFSIZE 1024
int main(int argc,char argv)
{
FILE* fps,*fpd;
char buf[BUFSIZE]
if(argc<3)
{
fprintf(stderr,"Usage: %s<src_file>,<des_file>\n");
exit(1);
}
fps=fopen(argv[1],"r");
if(fps==NULL)
{
perror("fopen()");
exit(1);
}
fpd=fopen(argv[2],"w");
if(fpd==NULL)
{
 fclose(fps);//防止内存泄漏
 perror("fopen()");
 exit(1);
while(1)
{
if(fgets(buf,BUFSIZE,fps)!=NULL)
  fputs(buf,fpd)
fclose(fps);
fclose(fpd);
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值