0
#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

为什么?

4

2 回答 2

2
  • '0'是“ASCII 字符0”并且具有值0x30
  • '\0'是表示值的字符0并且具有值0
  • 0只是价值0
  • pt是一个4整数数组,所以它的大小是我们机器上整数大小的 4 倍(显然是 4),所以你得到16.
  • 由于pt是一个整数数组,其第一个值为00x30也就是说,作为整数的值是0x00000030。当您键入 cast ptto a character pointer 时,它看起来像一个指向前 3 个值为零的字符串的指针。所以strlen0(编辑:因为你的特定架构的字节序)。
于 2013-09-14T03:06:05.313 回答
1

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

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

sizeof给出对象或数组中的字节数. strlen计算从数组的开头char到值为 0 的第一个字节的字节数,不包括终止的 0。在您的示例中,您有一个由 4 个整数组成的数组,每个整数占用 4 个字节; 4*4=16。

于 2013-09-14T03:06:00.187 回答