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