C4996的错误是什么意思?

时间:2016-06-28 05:54:26

标签: c++ visual-c++

这是一个简单的C ++代码:

#include <cstring>
using namespace std;

int main(int argc, _TCHAR* argv[])
{
    char str[80];
    cout << "輸入字串:";
    gets(str);
    cout << "輸入的字串:" << str << endl;
    return 0;
}

编译时,我收到以下错误:

  

&#34;错误1错误C4996:&#39;得到&#39;:此功能或变量可能不安全。

     

请考虑使用gets_s。要禁用弃用,           使用_CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。&#34;

2 个答案:

答案 0 :(得分:3)

在正版C++11或C ++ 14中,阅读整行的正确方法是std::getlinestd::basic_istream::getline

此外,在读取输入之前,您最好先刷新输出;请记住,C ++和C标准IO函数是buffering

C89 gets函数已被弃用很长时间(可能超过十年),现在被禁止,因为它非常危险(无法避免{{} 3}})。所以请忘记它(在C99或C11中,使用buffer overflow代替,在使用C99或C11的POSIX上,使用fgets;在C ++ 11或C ++ 14中使用,如我所说{{3} }或getline)。

main的正文应为:

string str;
cout << "輸入字串:" << flush;
getline(cin,str);
cout << "輸入的字串:" << str << endl;
return 0;

使用std::string的好处是您的用户可以输入任意长的行(达到实现限制,可能是数百万个字符)。

如果您正在使用MacOSX或Linux等POSIX系统进行编码,那么在阅读std::getline时,您可以使用std::basic_istream::getline库和函数(另请参阅GNU readline)。最大的好处是,在输入行时,您的用户将获得编辑能力(和完成)。

PS。编程时的一般提示:阅读编码前使用的每个函数的文档

答案 1 :(得分:1)

这意味着您应该使用result.toString()代替[{"Jobs":["Bar management","Baker","Bar service"],"lastUpdated":"Tue Jun 28 13:54:24 GMT+08:00 2016","CategoryName":"fulltime"}] 编译器通常知道什么是最适合该程序的,以及不应该允许的内容。