为什么在gcc(linux)中考虑fgets()以及使用它的替代方法是什么?

时间:2011-07-20 11:05:31

标签: c linux gcc stdio fgets

  

可能重复:
  Why is the `gets' function is dangerous? Why should not be used?

我建议用户使用fgets()输入一个字符串,这将使用scanf()进行分析,以区分整数,浮点数和字符。我想要一个可靠的程序但我使用gcc得到以下警告:

在函数main': : warning: the获取'函数是危险的,不应该使用。

任何人都可以告诉我为什么它是危险的,它的安全替代方案是什么? 如果有人能告诉我fgets()致命的严重性,那将非常有用。

1 个答案:

答案 0 :(得分:4)

你可能有点困惑。简而言之:gets不好,fgets没问题。

man页面解释了为什么不应该使用gets

BUGS
       Never use gets().  Because it is impossible to tell without knowing the
       data  in  advance  how  many  characters  gets() will read, and because
       gets() will continue to store characters past the end of the buffer, it
       is  extremely  dangerous  to  use.   It has been used to break computer
       security.  Use fgets() instead.

fgets将缓冲区的大小作为其参数之一,如果使用正确,则不会出现此问题。

常见问题解答有entry with more details