为什么VS2013告诉我使用scanf_s?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么VS2013告诉我使用scanf_s?相关的知识,希望对你有一定的参考价值。

我在德克萨斯理工大学的编程课上,在上学期学习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 
",i);
printf("print numbers a : %10.3d 
", i);
printf("print numbers a : %-10.3d", i);

fflush(stdin);
getchar();
return 0;
}
答案

The _s family of functions是Microsoft提供的标准库函数的“安全”变体。许多标准库函数不被认为是安全的,因为它们不允许或不要求用户防止缓冲区溢出。 _s函数是允许/需要缓冲区溢出保护的替代方法(通常这意味着它们需要额外的参数来指定您传入的缓冲区的大小,但是在scanf_s()的情况下,它需要格式字符串包含每个的宽度说明符%c%C%s%S参数)。

您可以通过在项目设置中设置_CRT_NONSTDC_NO_WARNINGS define来禁用这些警告。或者,如果您选择,请切换到_s函数(但请注意,这样做会将您的代码绑定到Microsoft运行时库[或C11;请参阅下面的注释],并使其不可移植)。

以上是关于为什么VS2013告诉我使用scanf_s?的主要内容,如果未能解决你的问题,请参考以下文章

2019/12/7 vs studio 中scanf_s()问题

C++ scanf_s()函数的用法以及注意事项

vs2019 c语言 字符串用法?

在VS2019中编写C语言的链表程序出现了C4473等错误,怎么修改?

使用vs2013编写c语言程序 为啥 会出现max函数没有被定义error

C语言char数组 字符串读入问题