我试图在VS 2013中编写一个简单的测试程序。它告诉我scanf()
不安全,我应该使用scanf_s()
代替。更糟糕的是,它告诉我int x
未初始化(并且不仅仅是警告,而是错误),即使它不需要在那里初始化。我想知道是否可以更改设置,以便VS2013不会给我这些错误消息,或者弄清楚我做错了什么。
#include <stdio.h>
int main(){
printf("How many pizzas did you make: ");
int x;
scanf("%d", x);
}
答案 0 :(得分:3)
使用cout而不是printf()和cin而不是scanf 例如:
const int SIZE = 5;
char word[SIZE];
cout << "Enter a word: ";
cin >> setw(SIZE) >> word;
cout << "You entered " << word << endl;
不要忘记导入std库
using std;
答案 1 :(得分:2)
你可能在这一行中犯了错误
scanf("%d", &x);
答案 2 :(得分:0)
scanf被警告为不安全,因为它可能导致缓冲区溢出。而scanf需要x
的地址,因此它应该是&x
。
答案 3 :(得分:0)
您的示例代码中存在一个完全错误和可能的错误:
scanf("%d", x);
以上需要一个指针,您必须始终验证所有输出参数是否匹配。
对于第二种情况,微软支持强制您放弃标准C库函数的驱动程序,甚至声称它们的使用是不受支持的风险,而不是更安全在可选项中的功能C标准的一部分也不能以不安全的方式使用。
查看编译器文档,有一个标志可以抑制这种恼人的行为。
无论如何,你是用C ++写的,所以这里的每个人都会说你应该使用iostreams和惯用的C ++,无论你怎么问或为什么。