C中的gets()字符串函数被认为是一种不好的做法吗?

时间:2014-03-15 05:15:17

标签: c gets

正在阅读Head第一本C书,偶然发现作者说gets()是一个不好的做法

  

gets()是一个功能               已经存在了很长时间。               但你真的需要知道的               是你真的不应该               用它。

为什么它被认为是一种不好的做法?

2 个答案:

答案 0 :(得分:5)

考虑

#include<stdio.h>
int main()
{
    char buffer[100];
    gets(buffer);
    printf("The input is %s",buffer);
}

当用户输入长度在99以内的输入时,没有问题。但是当用户输入超过99个字符时,它会尝试写入它不拥有的内存。

最糟糕的是它导致异常行为并且程序终止而没有任何让用户对当前情况感到困惑的信息

另一种方法是使用char *fgets(char *s, int size, FILE *stream);函数

更新:正如@pmg指出的那样:gets()删除新行,而fgets()保留新行

答案 1 :(得分:4)

gets容易出现缓冲区溢出(即内存损坏等)。

fgets通过传递缓冲区的大小

来实现