2013-06-03 15 views
11

なぜsizeof("Bill")5ですが、sizeof(char)1ですか?文字列のバイトサイズが長さよりも長いのはなぜですか?

文字列の長さが4文字(4 x 1)なので、sizeof("Bill")4にする必要はありませんか?

文字の配列である"Bill"と関係がありますが、なぜそれがバイトサイズを増やすのでしょうか?

+4

、ターミネータ文字として0を持っている - 私は同意する - これは通常、C(またはC上の合理的なプログラミングの本の章の最初のカップルの中に覆われており、簡単なCプログラミングです++ ) –

+7

これは良い正準な答えを書いて、うまくいけばインターネットを少し改善する場所としてこの質問を使わない理由ではありません。 –

+2

@EdHeal締め切りの投票があなたの良い兆候になるかもしれません;)私は全く同意しますが、この質問はFAQの「研究努力がない」という言葉に非常によく似ています。 –

答えて

22

C文字列はNULLで終了します。その文字列の最後にゼロバイトがあります。 C標準から

'B' 'i' 'l' 'l' '\0' 
0x42 0x69 0x6c 0x6c 0x00 

、第6.4.5文字列リテラル、第7項:

翻訳フェーズ7、バイトまたはのコードではASCIIと仮定すると、"Bill"は、メモリ内にこのようになります文字列リテラルまたはリテラルの結果である各マルチバイト文字シーケンスに値ゼロが付加されます。

あなたは長さ4の答えを取得したい場合は、むしろsizeofよりも、strlen("Bill")を使用する必要があります。

ヌルターミネータが本当に必要ない場合は、これも可能ですが、おそらく不適切です。この定義:

char bill[4] = "Bill"; 

はノーNULL終止符で、単に文字'B''i''l'、および'l'を含む4バイト配列billが得られます。

3

それはH2CO3 @そうそのB i l l 0

関連する問題