Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么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 \n",i); printf("print numbers a : %10.3d \n", i); printf("print numbers a : %-10.3d", i); fflush(stdin); getchar(); return 0; } #包括 int main(){ int i,j; 浮动x,y; scanf(“输入一个号码:%d%d%f%f”、&i、&j、&x、&y); printf(“打印编号a:%d\n”,i); printf(“打印编号a:%10.3d\n”,i); printf(“打印编号a:%-10.3d”,i); fflush(stdin); getchar(); 返回0; }_C++_Visual Studio_Visual C++_Visual Studio 2013 - Fatal编程技术网

为什么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 \n",i); printf("print numbers a : %10.3d \n", i); printf("print numbers a : %-10.3d", i); fflush(stdin); getchar(); return 0; } #包括 int main(){ int i,j; 浮动x,y; scanf(“输入一个号码:%d%d%f%f”、&i、&j、&x、&y); printf(“打印编号a:%d\n”,i); printf(“打印编号a:%10.3d\n”,i); printf(“打印编号a:%-10.3d”,i); fflush(stdin); getchar(); 返回0; }

为什么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 \n",i); printf("print numbers a : %10.3d \n", i); printf("print numbers a : %-10.3d", i); fflush(stdin); getchar(); return 0; } #包括 int main(){ int i,j; 浮动x,y; scanf(“输入一个号码:%d%d%f%f”、&i、&j、&x、&y); printf(“打印编号a:%d\n”,i); printf(“打印编号a:%10.3d\n”,i); printf(“打印编号a:%-10.3d”,i); fflush(stdin); getchar(); 返回0; },c++,visual-studio,visual-c++,visual-studio-2013,C++,Visual Studio,Visual C++,Visual Studio 2013,是Microsoft提供的标准库函数的“安全”变体。许多标准库函数被认为是不安全的,因为它们不允许或不要求用户防止缓冲区溢出。\u s函数是允许/需要缓冲区溢出保护的替代方法(通常这意味着它们使用一个额外的参数指定要传入的缓冲区的大小,但在scanf\u s()的情况下)它要求格式字符串包含每个%c、%c、%s或%s参数的宽度说明符 您可以通过设置项目设置中定义的\u CRT\u nonsdc\u NO\u警告来禁用这些警告。或者,如果您选择,请切换到\s函数(但请注意,这样做会将您的代码绑定到

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


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

我宁愿说。。。不要使用它,除非你对不可移植的代码感到满意:好吧,这是微软的想法——我相信它只是scanf的“更安全”版本。。。很好的意图,但是…是一个VisualStudio扩展,应该有额外的安全增强功能。它不可移植到VisualStudio之外。避免使用C++,因此使用STD::CIN和STD::CUT。Boom.
fflush(stdin)
是一种未定义的行为。实际上,它们并不完全是微软的专利;它们是C11标准的可选部分。@Angew有趣。Microsoft的实施是否与C11标准100%兼容?他们已经存在很久了…我不知道,还没有真正检查过。我知道有一种情况,与MS函数相比,参数的标准交换顺序(不记得是哪一种,MSDN有一篇关于它的文章),但我相信一般的想法是相同的。
bsearch_s
qsort_s
具有不同的参数顺序。我不知道还有什么不同,但我还没有完全审核来源。参数排序差异是历史性的意外:VisualC++实现是在标准化之前首先实现的。在某些情况下,C委员会标准化了现有实践以外的东西(为什么,我不知道)。VisualC++还没有实现这些安全函数应该使用的C11约束处理程序(相反,我们有一个类似的概念,称为无效参数处理程序)。