今天有个同学问我一个问题 但是这个问题很好分析 我就打算那个来给他 一个溢出的概念
这里有个程序
#include <stdio.h>
#define PASSWORD "1234567"
int verify_password(char *password)
{
int authenticated;
char buffer[8];
authenticated = strcmp(password,PASSWORD);
strcpy(buffer,password); //溢出就在这里
return authenticated;
}
void main()
{
int valid_flag =0;
char password[1024];
while(1)
{
printf("please input password: ");
scanf("%s",password);
valid_flag = verify_password(password);
if (valid_flag !=0)
{
printf("incorrect password!\n\n");
}
else
{
printf("Congratulation! You have passed the verification!\n");
break;
}
}
}
看着源代码 很容易能看出来这个题的答案是1234567
那么好 如果我输入 12345678呢 答案是正确还是错误呢
程序显示的答案还是正确 那么为什么
原因很简单 多出来那个8把 我们函数的返回值 给覆盖了
然后把我们字符串结尾的00顶到返回值那里了。。。。
那么如果输入9位呢 很不幸 9位就不行
这里就应该知道为什么了吧。。。