I have the following code:
_Bool grantAccess(char *password){
char goodPassWord[]= "goodpass";
return (0 == strcmp(password, goodPassWord));
}
_Bool grantAccessExercise(void){
char password[9];
int allow = 0;
printf("Please enter password: ");
gets(password);
if (grantAccess(password)) {
allow = 1;
}
return (allow != 0);
}
当我输入任何10个字符的密码组合时,它会溢出并覆盖空终止符。有人能解释一下为什么非空终止值会导致StrCmp返回0吗?
0
没有保证的结果。它可能会完全执行其他操作。 - Blazegets
并不是“覆盖空终止符”,而是在数组越界写入空终止符。 - Some programmer dude