C言語では (P2)のような間違い?をしてもコンパイルエラーにならないことに注意しよう. (P2)は10文字分の配列しか用意していないところに10文字の初期値をしていしているので,末尾のNUL文字を格納するスペースがたりていない. このような場合,配列str2の中身は{ 0x31, 0x32, ..., 0x39, 0x30 } になって終端がNUL文字にならなくなる. なので,printf("%s\n", str2);とすると, 1234567890^E)x※wk△bl%@@-$^x&…みたいなメチャクチャ ハチャメチャな文字列が表示されることになる. この動作は char str[10] = "123456789";のような書き方が単なるシンタックス シュガーであり 実はchar str[10] = { 0x31, 0x32, ..., 0x39, 0x00 };と展開されるのだという