这是一个简单的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;
答案 0 :(得分:3)
在正版C++11或C ++ 14中,阅读整行的正确方法是std::getline或std::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"}]
编译器通常知道什么是最适合该程序的,以及不应该允许的内容。