我在新安装的Visual Studio社区2015 IDE中面临编译器错误(c3861):
我只想在stdio.h库中使用 gets()函数,我在程序中包含stdio.h
文件,但编译器显示编译器错误
如下所示:
error C3861: 'gets': identifier not found
如何使用gets()
函数正确编译程序。
答案 0 :(得分:17)
自C11起,gets
被gets_s
取代。 gets()函数不执行边界检查,因此该函数极易受到缓冲区溢出的影响。建议的替换为gets_s()
或fgets()
gets_s(buf);
fgets(buf, sizeof(buf), stdin);
答案 1 :(得分:5)
gets
函数被认为太危险了(因为它容易导致缓冲区溢出),因此它已从C和C ++的最新版本中删除。
您应该使用fgets
代替。使用该功能,您可以将输入限制为缓冲区的大小。
答案 2 :(得分:2)
如果您期待learn
关于
缓冲区溢出漏洞
你可以通过以下步骤使用它和其他不安全的功能
Compile As
值更改为Compile as C Code (/TC)
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!