为什么for循环中的scanf在visual studio中不起作用.但它可以在c++中工作吗? &g



visual studio error

dev c++

此代码在dev c++中工作,但在visual studio中不工作。埃罗是

错误C4996 'scanf':此函数或变量可能不安全。考虑使用scanf_s。

代码…

#include<stdio.h>
int main() {
int arr[5] = { 0 };
int i = 0;
printf("Enter the number :");
for (i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
return 0;

简短的回答:scanf不提供算术溢出保护,因此,使用它是不安全的。

详细回答:

原始问题始于C中get的缓冲区溢出问题. 链接:gets的发布及解决方案

由于gets功能,最早传播最广泛的蠕虫之一能够在整个互联网上传播。因为gets覆盖分配给用于存储它的变量的堆栈/内存。这会导致缓冲区溢出。

Scanf link:scanf()及其替代品的缺点

gets不同,scanf通过限制字符串缓冲区的大小提供了安全性,但是对于算术输入不可能。算术输入将覆盖堆栈缓冲区。虽然scanf提供了一种避免字符串缓冲区溢出问题的方法,但是,通常我们(懒惰的程序员)在使用scanf时不会指定限制,因此我们编写了一个替代scanf_s

scanf的其他替代品有strtolstrtokatoi等。

编辑1:从sscanf更改为scanf_s因此,我们编写了一个替代方案…

相关内容

  • 没有找到相关文章

最新更新