C 中的字符串。Strcpy 的行为很奇怪

问题描述 投票:0回答:1

strcpy 函数工作得很奇怪,我想知道发生了什么。

char name[] = "The Batman"; //10 characters
char name2[5];

strcpy(name2, name);

由于某种原因,名称现已更改。现在是“阿特曼”。这里怎么改名字了? 然而 name2 已成功分配给“蝙蝠侠”。既然 name2 不够大,无法容纳“蝙蝠侠”,这怎么可能呢?

c c-strings strcpy
1个回答
0
投票

之前

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
重写开头的内容。

© www.soinside.com 2019 - 2024. All rights reserved.