我有以下代码:
int main(int argc, char *argv[])
{
char ch[10];
printf("String 10 max. :: "); gets( ch );
printf("String: %s\n", ch);
return 0;
}
当我使用 "12345678"
作为 ch
运行它时,它运行良好。奇怪的是,当我使用 "123456789012345678901234567890"
运行时!第二个 printf
将所有字符串(30 个字符)打印到屏幕上。
为什么会发生这种情况?为什么我的代码没有崩溃?
感谢您的宝贵时间,
阿兹特克
最佳答案
缓冲区溢出是未定义的行为。它可能会崩溃,但没有人保证这一点。在大多数编译器中,堆栈会向下增长,因此您可能会覆盖 main
的返回地址,但对 printf
的调用不会覆盖您的字符串。
关于c - 为什么缓冲区溢出不会影响这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226217/