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です。
  • pt4整数の配列であるため、そのサイズはマシン上の整数のサイズの 4 倍 (明らかに 4) であるため、 が得られます16
  • は最初の値がであるpt整数の配列であるため、整数としての値はです。文字ポインタへの型キャストは、最初の 3 つの値が 0 である文字列へのポインタのように見えます。そうです(編集:特定のアーキテクチャのエンディアンのため)。00x300x00000030ptstrlen0
于 2013-09-14T03:06:05.313 に答える
1

'0'値が 48 の文字で、印刷および表示可能な数字を表します。

'\0'0はどちらも値 0 で、最初の値は文字型で、2 番目の値は整数リテラルです。

sizeofオブジェクトまたは配列のバイト数を返します。strlenの配列の先頭からchar値 0 の最初のバイトまでのバイト数をカウントし、終端の 0 は含みません。この例の場合、4 つの int の配列があり、各 int は 4 バイトを取ります; 4*4=16。

于 2013-09-14T03:06:00.187 に答える