gets/fgets功能和用法辨析

1.gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。
调用格式为:
gets(str);
其中str为字符串变量(字符串数组名或字符串指针)。
gets(str) 函数与 scanf("%s", &str) 相似,但不完全相同,使用 scanf("%s", &str) 函数输入字符串时存在一个问题,就是如果输入了 空格 会认为输入字符串结束。
空格后的字符将作为下一个输入项处理, 但 gets() 函数将接收输入的整个字符串直到 回车 为止。


1.gets()函数详解 和 缺陷
原型:
char *gets( char *buffer);
功能描述:
gets()函数从标准输入中读取一行文本,并存储于作为参数传递给它的数组中。一行文本由一串字符组成,以一个换行符('\n')结尾。在返回之前,gets()函数丢弃换行符('\n'),取而代之的是以'\0'结尾。
返回值:
读取成功,函数返回与buffer相同的指针。读入过程中遇到EOF或发生错误,函数返回NULL指针。当返回值为NULL指针时可以用 feof() 和 ferror() 来判断函数是遇到EOF还是发生错误。


2.fgets() 函数详解
fgets()函数用来从 标准输入设备(键盘)读取字符串;
调用格式为:
fgets(str,LENGTH,stdin);
原型:
char *fgets(char *s, int n, FILE *stream); 
功能描述:
从流中读入 n-1 个字符放入 s 为起始地址的空间内。如果在未读满 n-1 个字符之时,已读到一个换行符('\n')或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符('\n')。因此,确切地说,调用 fgets() 函数时,最多只能读入 n-1 个字符。读入结束后,系统将自动在最后加 '\0',并以 s 作为函数值返回。 
形参注释:
*s:结果数据的首地址;
n-1:一次读入数据块的长度,其默认值为1k,即1024;
stream:文件指针   
例:如果一个文件的当前位置的文本如下 
Love ,I Have 
But ........ 
如果用  
fgets(str1, 4, file1); 
则执行后 str1="Lov",读取了 4-1=3 个字符, 
而如果用  
fgets(str1, 23, file1); 
则执行后 str="Love ,I Have",读取了一行(包括行尾的'\n', 并自动加上字符串结束符'\0')。 
 
*特别说明
该函数从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个 '\0'组成完整的字符串。
如果文件中的一行太长,fgets从文件中读了 n-1 个字符还没有读到 '\n',就把已经读到的 n-1 个字符和一个 '\0' 字符存入缓冲区,文件中剩下的半行可以在下次调用 fgets() 时继续读。
如果一次 fgets() 调用在读入若干个字符后到达文件末尾,则将已读到的字符串加上 '\0' 存入缓冲区并返回,如果再次调用 fgets() 则返回 NULL,可以据此判断是否读到文件末尾。
注意:
对于 fgets() 来说,'\n' 是一个特别的字符,而 '\0' 并无任何特别之处,如果读到 '\0'就当作普通字符读入。
如果文件中存在 '\0' 字符(或者说0x00字节),调用fgets() 之后就无法判断缓冲区中的 '\0' 究竟是从文件读上来的字符还是由 fgets() 自动添加的结束符,所以 fgets() 只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有 '\0'。


*补充:
puts/fputs
这两个函数用于输出字符串,用法和注意事项与以上输入的两个函数差不多。
基本格式:
puts(str);
fputs(str,LENGTH,stdout);
  • 12
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值