'0','\ 0'和0与sizeof()和strlen()之间的区别是什么?

时间:2013-09-14 02:59:05

标签: c++ sizeof strlen

#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

为什么?

2 个答案:

答案 0 :(得分:2)

  • '0'是“ASCII字符0”,其值为0x30
  • '\0'是代表值0的字符,其值为0
  • 0只是值0
  • pt是一个4整数数组,因此它的大小是我们机器上整数大小的4倍(显然是4),因此得到16
  • 由于pt是一个整数数组,其第一个值为0,即0x30,因此整数值为0x00000030。当您向一个字符指针键入强制转换pt时,它看起来像一个指向前三个值为零的字符串的指针。因此,strlen0(编辑:因为您的特定架构的endianness。)

答案 1 :(得分:1)

'0'是一个值为48的字符,表示可打印和可显示的数字。

'\0'0都是值0,第一个具有字符类型,第二个是整数文字。

sizeof给出对象或数组中的字节数。 strlen计算从char数组的开头到值为0的第一个字节的字节数,并且不包括终止0。在您的示例的情况下,您有一个数组4个整数,每个int占4个字节; 4×4 = 16