Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';这就是';0''\0';0与sizeof()和strlen()?_C++_Sizeof_Strlen - Fatal编程技术网

C++ 什么';这就是';0''\0';0与sizeof()和strlen()?

C++ 什么';这就是';0''\0';0与sizeof()和strlen()?,c++,sizeof,strlen,C++,Sizeof,Strlen,当我改变intpt[4]={'0','\0',0}到intpt[4]={'\0','0',0} 结果是 size of pt: 16 strlen of pt: 1 为什么?'0'是一个值为48的字符,表示可打印和可显示的数字 '\0'和0都是值0,第一个值为字符类型,第二个值为整数文本 sizeof给出对象或数组中的字节数strlen统计从char数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。'0'是一个值为

当我改变
intpt[4]={'0','\0',0}
intpt[4]={'\0','0',0}

结果是

size of pt: 16
strlen of pt: 1

为什么?

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

'\0'
0
都是值0,第一个值为字符类型,第二个值为整数文本


sizeof
给出对象或数组中的字节数
strlen
统计从
char
数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。

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

'\0'
0
都是值0,第一个值为字符类型,第二个值为整数文本

sizeof
给出对象或数组中的字节数
strlen
统计从
char
数组开始到值为0的第一个字节的字节数,不包括终止的0。在您的示例中,您有一个4个int的数组,每个int取4个字节;4*4=16。

  • '0'
    是“ASCII字符
    0
    ”,其值为
    0x30
  • '\0'
    是表示值
    0
    的字符,其值为
    0
  • 0
    只是值
    0
  • pt
    是一个由
    4
    个整数组成的数组,因此它的大小是我们机器上一个整数大小的4倍(显然是4),因此得到
    16
  • 由于
    pt
    是一个整数数组,其第一个值为
    0
    ,即
    0x30
    ,因此作为整数的该值为
    0x00000030
    。当您向字符指针键入cast
    pt
    时,它看起来就像指向前3个值为零的字符串的指针。因此,
    strlen
    0
    (编辑:因为您的特定体系结构)
      • '0'
        是“ASCII字符
        0
        ”,其值为
        0x30
      • '\0'
        是表示值
        0
        的字符,其值为
        0
      • 0
        只是值
        0
      • pt
        是一个由
        4
        个整数组成的数组,因此它的大小是我们机器上一个整数大小的4倍(显然是4),因此得到
        16
      • 由于
        pt
        是一个整数数组,其第一个值为
        0
        ,即
        0x30
        ,因此作为整数的该值为
        0x00000030
        。当您向字符指针键入cast
        pt
        时,它看起来就像指向前3个值为零的字符串的指针。因此,
        strlen
        0
        (编辑:因为您的特定体系结构)

      字符串以“\0”(null)字符结尾。所以第一个确实有一个值,然后字符串结束,而第二个没有值。但这只是一种假设。字符串以“\0”(null)字符结尾。所以第一个确实有一个值,然后字符串结束,而第二个没有值。这只是一个假设。为什么在第一个例子中,pt的斯特伦:1@denzel_wu如果您的体系结构是little endian,则
      pt[0]
      的最低有效字节(
      0x30
      )存储在数组
      pt
      的第一个字节中。因此,
      strlen(pt)==1
      。为什么在第一个示例中,pt的strlen:1@denzel_wu如果您的体系结构是little endian,则
      pt[0]
      的最低有效字节(
      0x30
      )存储在数组
      pt
      的第一个字节中。因此,
      strlen(pt)==1
      size of pt: 16
      strlen of pt: 1
      
      size of pt: 16
      strlen of pt: 0