質問: C言語のsprintfについて #include main() { char buff[256], a[]="Computer"; int i=10; sprintf(buff, "%s%d", a, i); printf("%s\n", buff); return 0; } を #include main() { char buff[0], a[]="Computer"; int i=10; sprintf(buff, "%s%d", a, i); printf("%s\n", buff); return 0; } としてもエラーもなく動作するのはなぜですか? "Computer10"はbuffに'C', 'o', 'm', ・・・と入る気がするのにbuffの配列の 大きさは 関係ないのでしょうか??
回答: >としてもエラーもなく動作するのはなぜですか? 単なる偶然です。 >"Computer10"はbuffに'C', 'o', 'm', ・・・と入る気がするのに >buffの配列の大きさは関係ないのでしょうか?? 関係あります。C言語では配列の大きさは自分で管理する必要があります。 「sprintf(buff, "%s%d", a, i);」の記述は、 あくまでも「buffで宣言されたアドレスから使用する」ということを設定しているだけです。 buff[]のサイズがいくつあるかは気にしません。 従って「何に使用しているかわからない」メモリ領域を破壊しながらデータを入れています。 「偶然に」使用していないか、このプログラムには影響のない領域であるため問題なく動いているように見えるだけです。