VS 2013" Scanf"不安全

时间:2014-04-18 01:57:56

标签: c++ visual-studio-2013

我试图在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);
}

4 个答案:

答案 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 ++,无论你怎么问或为什么。