C语言:gets、puts、fgets、fput、gets_s函数

char *gets(char *s);
int puts(const char *s);

gets()函数用于读取整行输入,直到遇到换行符,然后丢弃换行符,存储其余字符,并且在这些字符后面添加一个’\0’使其成为一个C字符串。

puts()函数与gets()函数配套使用,该函数用于显示字符串,并在末尾添加一个换行符

通常,gets()函数是不安全的,因为gets()函数只有一个参数s用于表示字符串存储的地址,而无法判断读取的字符串是否超过s的内存大小。当gets()函数获取的字符串长度超过s地址允许的数组长度时候,会造成缓冲区溢出的情况。因此,C11标准中,gets()函数废除。


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

fgets()函数用于stream中最多读取一个小于size的字符,并将它们存储到s指向的缓冲区中,fgets()函数执行成功会返回与第1个参数一样的地址,如果读到文件结尾则会返回一个空指针

fgets()函数通过第2个参数size来限制读入的字符个数来解决缓冲区溢(buffer overflow)出问题。

fgets()gets()的区别:

  1. fgets()函数的第二个参数指明了读入字符的最大数量。如果该函数的值是n,那么fgets()将读入n-1个字符,或者读到遇到的第一个换行符位置。
  2. 如果fgets()读到一个换行符,会把它存储在字符串中,但gets()会直接丢弃换行符。
  3. fgets()函数的第3个参数指明了要读入的文件,而gets()用于从键盘读取输入。

fputs()函数与fgets()函数配对使用。fputs()函数的第二个参数指明他要写入的文件,与puts()函数不同的是,fputs()函数不会再待输出的字符串末尾添加一个换行符,而是字符串中有什么就输出什么。


char *gets_s(char *s, int size);

gets_s()函数是C11新增的用于代替gets()的函数(可选)。其用法与gets()函数类似,只是增加了第2个参数限制输入的字符的数量。

gets_s()函数与fgets()函数的区别:

  1. gets_s()函数只从标准输入中读取数据,所以不需要第3个参数;
  2. 如果gets_s()函数读到换行符,会丢弃它,与gets()函数一致。
  3. 如果gets_s()函数读到最大字符数都没有读到换行符,会执行以下几步:首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入直到换行或EOF,然后返回空指针。接着,调用以来实现的“处理函数”(或者你选择的其他函数),有可能中止或退出程序。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值