一、为什么不安全
看如下代码段:
int main() {
char arr[5] = { 0 };
scanf("%s", arr);
printf("%s\n", arr);
return 0;
}
这里的arr数组只允许存放5个字符,但是scanf函数照样把输入的字符全部放入arr数组,arr数组越界,栈空间被破坏,程序崩溃。
二、哪些函数不安全
scanf
strcpy
strcat
sscanf
fopen
三、如何解决
1.在VS编译器里使用scanf_s函数
但是仅支持VS编译器,不具有跨平台性(可移植性),比如在GCC上无法识别
scanf函数是C语言提供的
scanf_s是VS这个编译器提供的
建议使用标准C提供的函数
2.定义预定义符号:_CRT_SECURE_NO_WARNINGS
在程序第一行加上:
#define _CRT_SECURE_NO_WARNINGS 1
3.一劳永逸的解决方法
在VS安装路径下搜索:newc++file.cpp文件,在文件中加上:
#define _CRT_SECURE_NO_WARNINGS 1
以后创建的新的.c文件中都会自动有这句代码。