strcpy 函数工作得很奇怪,我想知道发生了什么。
char name[] = "The Batman"; //10 characters
char name2[5];
strcpy(name2, name);
由于某种原因,名称现已更改。现在是“阿特曼”。这里怎么改名字了? 然而 name2 已成功分配给“蝙蝠侠”。既然 name2 不够大,无法容纳“蝙蝠侠”,这怎么可能呢?
之前
scpcpy
:
name2 [ ] [ ] [ ] [ ] [ ]
name [T] [h] [e] [ ] [B] [a] [t] [m] [a] [n] [\0]
scpcpy
之后:
name2 [T] [h] [e] [ ] [B]
name [a] [t] [m] [a] [n] [\0] [t] [m] [a] [n] [\0]
即
scpcpy
超出了 name2
分配的内存,到 name
重写开头的内容。