我测试char数组,指针和字符串的长度/大小,如下代码所示
为什么sizeof(pArray)
是8?我猜这是一个应该是4的指针
为什么sizeof(str)
是8而不是6或7?
为什么sizeof("abcdef")
是7而不是6?
char array1[10] = {'a', 'b'};
char array[10] = "abcdef";
const char * pArray = "abcdef";
string str = "abcdef";
printf("array1:%d, array:%d, pArray:%d, str:%d,strsize:%d, strlen:%d, raw:%d\n", sizeof(array1), sizeof(array), sizeof(pArray), sizeof(str), str.size(), str.length(), sizeof("abcdef"));
节目输出:
array1:10, array:10, pArray:8, str:8,strsize:6, strlen:6, raw:7
答案 0 :(得分:4)
$
是10,因为你用10个元素声明它。sizeof(array1)
也是10; sizeof(array)
8是因为你在64位机器上,所以8字节= 64位; sizeof(pArray)
是类结构的大小,您将获得唯一内部指针的大小,在您的情况下是8字节(因为您在64位计算机中,这也可以从平台变为平台;)sizeof(str)
和str.size()
返回相同的内容 - 它是字符串本身的长度; str.length()
是7,因为C中的常量字符串总是在末尾获得隐式字符sizeof("abcdef")
以正确终止,因此它在字符串中是1个字节(6 + 1 = 7); < / LI>
答案 1 :(得分:2)
指针的大小取决于架构。如果在x64上编译,它将是8,在8/16位CPU上,它可能是16(少则非常罕见)。
字符串常量将始终在末尾获得隐式"\0"
以正确终止字符串。因此在将字符串const指定给固定大小的数组时要小心!