プロが教える店舗&オフィスのセキュリティ対策術

sprintf()関数で、たとえば下記のような使い方(4行目)って大丈夫なものでしょうか?上の方は単純化するようにこのように書いていますが、strはスタック領域に限定しませんし、ヒープ領域としても適切なサイズがアロケートされている前提で、あらかじめ文字列(\0終端)が格納された状態で4行目は大丈夫かというのが質問の趣旨です。

手元の環境ではとりあえず意図したとおりに動いている感じはしますが、ぱっと見メモリが壊れてもおかしくなさそうな気がするため、気になって質問してみました。

char str[100];
size_t len;
sprintf(str, "hoge");
len = sprintf(str, "%s %d", str, 100);

A 回答 (1件)

ISO による C の規格 (および POSIX) では「未定義動作」と規定されているのでアウト.



なお「未定義動作」なので, 状況によっては「意図したとおりに動いている感じがする」かもしれない.
    • good
    • 1
この回答へのお礼

ありがとうございます。
そんな使い方想定してないよ、ということが分かってすっきりしました。

偶々ライブラリの実装で、同じアドレスに同じ値を上書きしているからそれっぽく動いているように見えるのだろうなと予想はしていました。

お礼日時:2022/08/17 19:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!