来自man gets
:
永远不要使用gets()。因为在事先不知道数据的情况下不可能知道gets()会读取多少个字符,并且因为gets()会继续存储超过缓冲区末尾的字符,所以使用起来非常危险。它已被用来破坏计算机安全。请改用 fgets()。
几乎在我看到scanf
的所有地方都以应该有相同问题的方式使用(缓冲区溢出/缓冲区溢出)scanf("%s",string)
:. 这种情况下存在这个问题吗?为什么手册页中没有关于它的引用scanf
?为什么 gcc 在编译时不发出警告-Wall
?
ps:我知道有一种方法可以在格式字符串中指定字符串的最大长度scanf
:
char str[10];
scanf("%9s",str);
编辑:我不是要确定前面的代码是否正确。我的问题是:如果scanf("%s",string)
总是错误的,为什么没有警告并且手册页中没有任何关于它的内容?