我在德克萨斯理工大学的编程课上,在上学期学习Python之后,我终于进入了C ++课程。当我们今天在课堂上制作一个HelloWorld程序时,我和其他一些人得到了Microsoft Visual Studio 2013告诉我们使用scanf_s而不是scanf,就像教师在他的程序中使用的一样。下面是我的代码。
#include <stdio.h>
int main(){
int i,j;
float x,y;
scanf("input a number: %d %d %f %f", &i, &j, &x, &y);
printf("print numbers a : %d \n",i);
printf("print numbers a : %10.3d \n", i);
printf("print numbers a : %-10.3d", i);
fflush(stdin);
getchar();
return 0;
}
答案 0 :(得分:9)
The _s
family of functions是Microsoft提供的标准库函数的“安全”变体。许多标准库函数不被认为是安全的,因为它们不允许或不要求用户防止缓冲区溢出。 _s
函数是允许/需要缓冲区溢出保护的替代方法(通常这意味着它们需要额外的参数来指定您传入的缓冲区的大小,但在scanf_s()
的情况下,它需要格式化字符串以包含每个%c
,%C
,%s
或%S
参数的宽度说明符。
您可以通过在项目设置中设置_CRT_NONSTDC_NO_WARNINGS
定义来禁用这些警告。或者,如果您选择,请切换到_s
函数(但请注意,这样做会将您的代码绑定到Microsoft运行时库[或C11;请参阅下面的注释],并使其不可移植)。