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
的其他替代品有strtol
、strtok
和atoi
等。
编辑1:从sscanf
更改为scanf_s
因此,我们编写了一个替代方案…