#include <iostream>
int main(int argc, char* argv[])
{
int pt[4] = {'0','\0',0};
std::cout<<"size of pt: "<<sizeof(pt)<<std::endl;
std::cout<<"strlen of pt: "<<strlen((char*)pt)<<std::endl;
}
结果是:
size of pt: 16
strlen of pt: 1
当我将int pt[4] = {'0','\0',0};
更改为int pt[4] = {'\0','0',0};
结果是
size of pt: 16
strlen of pt: 0
为什么?
答案 0 :(得分:2)
'0'
是“ASCII字符0
”,其值为0x30
。'\0'
是代表值0
的字符,其值为0
。0
只是值0
。pt
是一个4
整数数组,因此它的大小是我们机器上整数大小的4倍(显然是4),因此得到16
。pt
是一个整数数组,其第一个值为0
,即0x30
,因此整数值为0x00000030
。当您向一个字符指针键入强制转换pt
时,它看起来像一个指向前三个值为零的字符串的指针。因此,strlen
为0
(编辑:因为您的特定架构的endianness。)答案 1 :(得分:1)
'0'
是一个值为48的字符,表示可打印和可显示的数字。
'\0'
和0
都是值0,第一个具有字符类型,第二个是整数文字。
sizeof
给出对象或数组中的字节数。 strlen
计算从char
数组的开头到值为0的第一个字节的字节数,并且不包括终止0。在您的示例的情况下,您有一个数组4个整数,每个int占4个字节; 4×4 = 16