gpt4 book ai didi

c++ - 为什么 VS2013 告诉我使用 scanf_s?

转载 作者:太空狗 更新时间:2023-10-29 19:58:28 26 4
gpt4 key购买 nike

我在德克萨斯理工大学上编程课,在上学期忍受了 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;
}

最佳答案

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

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

关于c++ - 为什么 VS2013 告诉我使用 scanf_s?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com