strとして初期化された文字列のサイズchar str[]="S\032ABCD"
このヌル文字は、sizeof演算子の結果にとって実際に何を意味しますか?
文字列リテラルのサイズは、文字数に終端の NUL バイトの 1 を加えたものです。あなたの場合sizeof "S\032ABCD"は 7 です (\032 は 8 進数のエスケープ シーケンスであり、1 文字を表すため)。このリテラルは文字配列の配列初期化子として使用されるため、sizeof str同様に 7 です。
C では、先頭に付いている数値はすべて08 進数と見なされます。したがって、 は032全体として単一の文字と見なされます。したがって、sizeofは 7 (6 文字 + NUL 終了の場合は 1) です。
8 進エスケープのみを削除する\と、sizeof は 8 になります。
このsizeof演算子は、型によって決定されるサイズをバイト単位で返します。
strlenこれは、文字列の長さを測定し、NUL ターミネータを検索する と混同しないでください。
sizeofはあなたの NULL ターミネータを気にしません。あなたの配列を見て、「実際には、これはおそらく文字列なので、NUL ターミネータを探します」とは考えません。sizeofさらに、コンパイル時に行うように、一般的なケースではこれを行うことはできません。