2

strとして初期化された文字列のサイズchar str[]="S\032ABCD"

このヌル文字は、sizeof演算子の結果にとって実際に何を意味しますか?

4

3 に答える 3

2

文字列リテラルのサイズは、文字数に終端の NUL バイトの 1 を加えたものです。あなたの場合sizeof "S\032ABCD"は 7 です (\032 は 8 進数のエスケープ シーケンスであり、1 文字を表すため)。このリテラルは文字配列の配列初期化子として使用されるため、sizeof str同様に 7 です。

于 2012-10-05T21:28:38.663 に答える
1

C では、先頭に付いている数値はすべて08 進数と見なされます。したがって、 は032全体として単一の文字と見なされます。したがって、sizeofは 7 (6 文字 + NUL 終了の場合は 1) です。

8 進エスケープのみを削除する\と、sizeof は 8 になります。

于 2012-10-05T21:30:50.767 に答える
0

このsizeof演算子は、型によって決定されるサイズをバイト単位で返します。

strlenこれは、文字列の長さを測定し、NUL ターミネータを検索する と混同しないでください。

sizeofはあなたの NULL ターミネータを気にしません。あなたの配列を見て、「実際には、これはおそらく文字列なので、NUL ターミネータを探します」とは考えません。sizeofさらに、コンパイル時に行うように、一般的なケースではこれを行うことはできません。

于 2012-10-05T21:22:51.817 に答える