警告:获取功能是危险的

16 c

当我使用gets函数时,gcc给了我一个警告:

warning:the `gets' function is dangerous and should not be used.
Run Code Online (Sandbox Code Playgroud)

为什么获取和放置功能危险?

小智 48

如果您有这样的代码:

char s[10];
gets( s );
Run Code Online (Sandbox Code Playgroud)

并且在程序运行时输入超过10个字符,您将溢出缓冲区,从而导致未定义的行为.gets()函数无法阻止您键入字符,因此应该避免.相反,您应该使用fgets(),它允许您限制读取的字符数,以便缓冲区不会溢出:

char s[10];
fgets( s, 10, stdin );
Run Code Online (Sandbox Code Playgroud)

puts()函数是完全安全的,前提是您输出的字符串以空值终止.

  • `fgets`不会丢弃字符.它让他们未读.随后对`fgets`或任何其他读取函数的调用可以读取剩余的字符. (6认同)

Mar*_*tos 5

因为gets不限制它读取的数据量,因此容易受到缓冲区溢出的影响。@Neil 的答案对此有适当的解决方案。

AFAIK,该puts函数并不危险,当然,除非您忘记将其空终止。