私はこのコードでセグメンテーション違反を予期していました:
char * foo (char my_ascii[10])
{
strcpy (my_ascii, "0123456789");
return my_ascii;
}
char bar[2];
printf("%s\n", foo (bar));
bar はスタックに 2 文字の配列を予約し、foo() は 10 文字を書き込もうとするためです。ただし、printf() は stdout 10 文字で書き込み、エラーは発生しません。なぜこうなった?
さらに、このように foo() 関数を変更すると:
char * foo (char my_ascii[1])
{
strcpy (my_ascii, "0123456789");
return my_ascii;
}
動作はまったく同じです。10 文字が my_ascii にコピーされます。説明はありますか?
事前にどうもありがとうございました。