#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main() {
char *a = "aaaaaaaaaaaaaaaa";
char b[1];
strcpy(b, a);
printf("%s\n", b);
}
运行时,它打印:当strcpy()导致缓冲区溢出时为什么没有分段错误?
aaaaaaaaaaaaaaaa
如果我做*超长,例如,* A = “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”,那么就会造成一个段错误。
为什么在第一种情况下没有溢出?
未定义的行为。该程序在您的浴室中产生一头大象完全有效。 – EOF 2015-02-05 19:29:28
C语言中没有“分段错误”这样的事情。你可以做任何事情,包括跨越其他记忆。当你做这些事时会发生什么,这就是我们不知道的 - 也许程序会崩溃,也许它会“起作用”,也许它在一台机器上工作,并在另一台机器上崩溃等等。这就是所谓的“未定义行为'。 – PaulMcKenzie 2015-02-05 19:35:43
这是一个多重复制,但不能找到一个副本。 – 2015-02-05 19:49:58