我在发现一个问题时遇到了一些麻烦。鉴于以下情况:
int match(char *s1, char *s2) {
while( *s1 != '\0' && *s2 != '\0' && *s1 == *s2 ){
s1++; s2++;
}
return( *s1 - *s2 );
}
int main() {
char str1[8], str2[8];
scanf("%s", str1);
scanf("%s", str2);
if (match(str1, str2) == 0)
printf("They are the same.\n");
else
printf("They are not the same.\n");
}
哪两个不同值的输入字符串可用于使程序打印消息“它们是相同的”?(以上代码不可更改)
我知道当数组被添加到堆栈中时,它们被“推入”其中并且信息被写入相同的方向。因此,如果我在 str2 中输入“AAAAAAAAA”(A x 9),它会溢出并且 str1 会打印“A”。
我的第一次尝试是为 str2 输入 A x 16,希望程序会用 8 个 A 覆盖 str1 中的值,并且程序只会读取 str2 中的 8 个值。str1 确实有 A x 8 的值,但 str2 保留了 A x 16 的值。
有没有办法用它来解决这个问题?还是我想错了?
编辑:这个问题是要在具有过时的、因此易受攻击的 Linux 版本的特定机器上运行的。我已经通过 gdb 运行程序,它显示两个字符串在内存中彼此相邻,并且 str2 溢出到 str1。那么我的问题是,我可以使用它来使 str2 和 str1 在比较它们时看起来与程序相同吗?