在Visual Studio 2015社区中没有gets()函数

时间:2015-08-29 07:21:10

标签: c++ visual-studio-2015

我在新安装的Visual Studio社区2015 IDE中面临编译器错误(c3861):

我只想在stdio.h库中使用 gets()函数,我在程序中包含stdio.h文件,但编译器显示编译器错误 如下所示:

error C3861: 'gets': identifier not found 

如何使用gets()函数正确编译程序。

5 个答案:

答案 0 :(得分:17)

自C11起,getsgets_s取代。 gets()函数不执行边界检查,因此该函数极易受到缓冲区溢出的影响。建议的替换为gets_s()fgets()

gets_s(buf);
fgets(buf, sizeof(buf), stdin);

答案 1 :(得分:5)

gets函数被认为太危险了(因为它容易导致缓冲区溢出),因此它已从C和C ++的最新版本中删除。

您应该使用fgets代替。使用该功能,您可以将输入限制为缓冲区的大小。

答案 2 :(得分:2)

如果您期待learn关于

  

缓冲区溢出漏洞

你可以通过以下步骤使用它和其他不安全的功能

    来自解决方案资源管理器的
  1. 右键单击项目并选择属性
  2. 导航至配置属性>> C / C ++>>高级
  3. Compile As值更改为Compile as C Code (/TC)
  4. (可选)如果您要禁用警告,请将其警告号码放在disable specific warning

答案 3 :(得分:0)

gets_getws已从vs 2015开始删除,因为这些功能已过时。 替代功能为gets_s_getws_s

答案 4 :(得分:0)

函数gets 被移除并由gets_s 代替,因为显然微软的人认为他们知道得更好,我们无法编写正确的安全代码! 实际上,我们大多数人只在安全性不是很重要的小型测试程序中使用“gets”,在实际项目中我们使用更安全的方法。 但无论如何它应该取决于开发者, C 和 C++ 是关于自由的,这就是我们选择它的原因,因为与 C#、Java 或其他任何东西不同,我们不应受限于他们决定让我们做的事情, 删除 get 是对 C 和 C++ 以及所有开发人员的侮辱,从那时起我决定停止使用 Visual Studio!