C Primer Plus学习 二十四 字符串输入 fgets ()函数

        gets ()的一个不足是它不检査预留存储区是否能够容纳实际输入的数据。多出来的字符简单地溢出到相邻的内存区。fgets ()函数改进了这个问题,它让您指定最大读入字符数。由于fgets ()是为文件I/O 而设计的,在处理键盘输入时就不如gets ()那么方便。fgets ()和gets ()有三方面不同:

•它需要第二个参数来说明最大读入字符数。如果这个参数值为n, fgets ()就会读取最多n-1个 字符或者读完一个换行符为止,由这二者中最先满足的那个来结束输入。

•如果fgets ()读取到换行符,就会把它存到字符串里,而不是像gets ()那样丢弃它。

•它还需要第三个参数来说明读哪一个文件。从键盘上读数据时,可以使用stdin(代表j/andardiViput) 作为该参数,这个标识符在stdiah中定义。

/* name3.c --使用fgets ()读取一个名字*/
#include<stdio.h>
#define MAX 81
int main(void)
{
char name[MAX];
char *ptr;

printf("Hi what's your name?\n");
ptr=fgets(name,MAX,stdin);
printf("%s? Ah! %s!\n",name,ptr);
return 0;

}


         问题在于fgets()把换行符存储到字符串里,这样每次显示字符串时就会显示换行符。本章后面“其 他字符串函数”小节的结尾将会介绍如何用strchr ()来定位和删除换行符。
         由于gets ()不检査目标数组是否能够容纳输入,所以很不安全^的确,几年前就有人注意到一些UNIX操作系统代码使用gets (),于是他们利用这个弱点,用很长的输入覆盖操作系统的代码,从而发明了在 UNIX网络上传播的“蠕虫(worm) ”病毒。那些系统代码后来被不使用gets ()的代码所代替。因此对 于重要的编程,应该使用fgets ()而不是gets (),但本书使用了更随便的做法。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值