我在向一个字符型数组传输数据时,出现了堆栈损坏的问题,源码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "123456";
char arr2[] = { 0 };
int i = 0;
for (i = 1; i <= 3; i++)
{
printf("请输入密码:");
scanf("%s", arr2);
if (strcmp(arr1,arr2) == 0)
//比较两个字符串是否相等,不能使用==,而应该使用一个库函数:strcmp
//如果返回值为0,则表示两个字符串相等
{
printf("密码正确,成功登录!\n");
break;
}
else
{
printf("密码错误\n");
}
}
return 0;
}
运行输入密码后:
错误提示:arr2变量周围的堆栈已损坏。
问题所在:观察所声明的字符数组arr2,所给空间为1个字符,后续输入为'123456',超出最初计算机所规划的空间大小。
解决办法:明确大小并且声明足够大的空间。
char arr2[10] = { 0 };