gets函数的完美替代

众所周知 在C语言中scanf用来读取一行字符串时遇到空格或回车会停止

而若要读入一行带空格的字符串时 有些人会用gets来代替

 

然而,gets的最大问题在于:会读取超过数组长度上限个字符,而超出长度的字符会被读进其他未被分配的内存空间,如果这段空间已经有了数据,就会导致程序错误而中断

 

正是由于此缺陷,在C11标准中直接抛弃了gets,这个时候我们可以用fgets来替代gets

 

我们先看一下函数原型声明:
 

 

char *fgets(char *buf, int bufsize, FILE *stream);

 

可以看出fgets主要用来读取文件,若要读取键盘的话stream参数应为stdin

 

bufsize参数为能够读取的最大上限(值得注意的是,若该参数为n,则最多能读取n-1个字符)

 

将一直读取到换行符为止(包括换行符

 

故我们往往人为的将最后一个换行符转化为结束符

 

 

 

例如:

 

 

posted @ 2019-03-14 20:08  Chr1stopher  阅读(1298)  评论(0编辑  收藏  举报