Rub*_*ben -3 c++ arrays sizeof
我想使用sizeof函数来获取char数组的大小。我得到的尺寸太大了。例:
#include <stdio.h>
char text[] = "hey";
const int n = sizeof(text);
int main(int argc, char *argv[])
{
printf("%i\n", n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出4,而不是预期的3。我在各种在线c ++编译器上重现了此行为,所以我认为这是有目的的(奇怪的是,我在Internet上找不到任何东西)。我在网上可以找到的大多数资源都说应该为3 * sizeof(char)(在大多数普通系统上为3)。
如果我正确理解了所有内容,那么将以某种方式将多余的字节用于数组表示。为什么会这样?
字符串文字是隐式NUL终止的,"hey"实际上是四个字符。您看到的三个字母,再加上一个\0(aka NUL)。
当您在不指定大小的情况下初始化数组时,它会调整其大小以匹配初始值设定项,并且初始值设定项是包括在内的四个字节NUL。char text[] = "hey";等于说char text[] = {'h', 'e', 'y', '\0'};。如果它不能这样工作,则尝试以C样式字符串的形式处理数组的内容将越过缓冲区进入相邻的内存,直到NUL巧合地找到终止符为止。
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |