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

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

gets()是一个已存在很长时间的函数。 但你真正需要知道的是你真的不应该使用它。

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

考虑

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

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

最糟糕的是它会导致exception行为,并且程序终止时没有任何让用户对目前情况感到困惑的信息

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

更新:正如@pmg所指示: gets()删除换行符,而fgets()保留新行

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

通过传递缓冲区的大小来实现fgets