質問: {0}; : : : printf("%s\n", str1); memmove(str2, str1, 9); memset(str2, 'A', 9); printf("%s\n", str2); 1 printf("%s\n", str1); : : : ```
回答: こんにちは。 意外と思いますが、心臓に悪いプログラムですよ。 `char str2[] = {0};`はstr2の領域としてchar型を1つだけ確保し、0で初期化する指示になってます。 つまり、str2は1バイトしか領域が確保されていません。そこに9バイトをコピーしてますので、残りの8バイトはstr2でない他のエリアを破壊しています。 そのような操作をすると、どのような結果になるのか未定義なのです。 `char str2[9]={0};`とすれば9バイト確保されます。 なお、文字列は最後に0が付いてます。つまり、"123456789"は最後に0があるので全部で10バイトあります。 最後の0(NULL終端)の存在を忘れないように。