我在我的程序中使用了 scanf(),当我编译它时,我收到很多关于使用 scanf 的警告,如下所示: D:\myspace\projects\nnf\NNFAdaptor\NNFAdaptor\main.cpp C4996: 'scanf':此函数或变量可能不安全。考虑改用 scanf_s。要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。
我也尝试使用 _CRT_SECURE_NO_WARNINGS 但它不存在于我的 Qt(标题)中,它显示为错误。
放在#define _CRT_SECURE_NO_WARNINGS
main.cpp 的顶部(在 any 之前#includes
)。
这类警告大多是错误的(特别是关于改用什么),但确实不应该使用scanf
,因为:
gets
,即它会在不注意的情况下写入缓冲区的末尾。可以编写不存在此问题的格式规范,但要困难得多。scanf
基于 - 的输入解析器来可靠地处理格式错误的输入。你不应该改用scanf_s
;它试图掩盖问题 1,但并没有完全成功,它根本没有解决问题 2 和 3。由于您使用的是 Qt,我建议:
std::string
s std::getline
。QRegExp
。QString::toDouble
。如果您的输入语法比正则表达式处理的更复杂,请调查QLALR
.