如何删除有关在Qt中使用scanf的警告?
我在我的程序中使用了scanf(),当我编译它时,我收到了很多关于使用scanf的警告,如下所示: D:\myspace\projects\nnf\NNFAdaptor\NNFAdaptor\main.cpp C4996:“scanf”:此函数或变量可能不安全。考虑使用SncFis代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告如何删除有关在Qt中使用scanf的警告?,qt,security,scanf,Qt,Security,Scanf,我在我的程序中使用了scanf(),当我编译它时,我收到了很多关于使用scanf的警告,如下所示: D:\myspace\projects\nnf\NNFAdaptor\NNFAdaptor\main.cpp C4996:“scanf”:此函数或变量可能不安全。考虑使用SncFis代替。要禁用弃用,请使用_CRT\u SECURE\u NO\u警告 我也尝试过使用“CRT\u SECURE\u NO\u警告”,但它没有出现在我的Qt(标题)中,它显示为错误。在main.cpp的顶部(在任何\in
我也尝试过使用“CRT\u SECURE\u NO\u警告”,但它没有出现在我的Qt(标题)中,它显示为错误。在main.cpp的顶部(在任何
\includes
之前)放置\define\u CRT\u SECURE\u NO\u警告。这类警告大多是错误的(特别是关于使用什么来代替)但确实不应该使用scanf,因为:
编写危险的格式规范非常容易,就像get
危险一样,也就是说,它会在没有注意到的情况下写入缓冲区的末尾。可以编写没有这个问题的格式规范,但这要困难得多
几乎不可能编写一个基于scanf的输入解析器来可靠地处理格式错误的输入
任何数字转换中的溢出在技术上都是未定义的行为,这意味着C库被允许仅仅因为有人键入了太多的数字而使程序崩溃。(好的C库不会比在结果变量中生成垃圾更糟糕,但这本身可能是一件令人头痛的事情。)
您应该而不是使用scanf_s
;它试图掩盖问题1,但并没有完全成功,也根本没有解决问题2和问题3。由于您使用的是Qt,我建议您:
- 使用
std::getline
将整行读入std::string
s
- 使用
QRegExp
解析它们
- 将数字字符串转换为数字,例如使用
QString::toDouble
如果您的输入语法比正则表达式所能处理的更复杂,请调查QLALR