sizeof char[]="some" 很奇怪

问题描述 投票:0回答:1
char  string0[]=  "0123456789";  // sizeof(string0)=11
char  string1[11]="0123456789A"; // sizeof(string1)=11

string1 的情况很清楚,为字符分配了 11 个字节加上 ' ' 的 1 个字节,并且 sizeof() 不计算终止符。

我不清楚 string0 的情况,为字符分配了 10 个字节,为 ' ' 分配了 1 个字节,因此 sizeof() 应该报告 10

为什么 sizeof() 在两种情况下都表示相同的大小?

c char sizeof
1个回答
0
投票

sizeof() 不计算终止符”

sizeof
报告已分配内存的大小。

第一个是自动分配的,大小为 11,因为有 10 个字符和 NUL。第二个是手动分配的大小为11,其中填充了11个字符,没有NUL,因为没有空间;如果你尝试打印它,最多只会得到乱码。

参见 为什么 gcc 允许使用大于数组的字符串文字初始化 char 数组?

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