1. ホーム
  2. c++

[解決済み] 変数の周りのスタック...が破損していた

2022-02-08 16:05:28

質問

あるデータを新しいファイルに書き込む簡単な関数があります。しかし、MSVS Express 2013でデバッグしていると、上記のようなエラーが発生します。

void writeSpecToFile(const char *fname); //in header file.

char myChar [20];
sprintf(myChar, "aa%03daa%daa", i1, i2);
const char* new_char = myChar;
writeSpecToFile(myChar);

見ての通り、私は単にsprintfを使用して文字列にいくつかの変数を挿入します(正常に動作します)。しかし、myChar を渡しても new_char を渡しても、文字化けのエラーが発生します。

何がいけなかったのでしょうか?

どうすればいいですか?

キャラクタバッファのサイズを20にしたのはなぜですか? おそらく sprintf には、myChar に収まる以上の文字が配置されています。

代わりに

  1. std::ostringstreamのような安全な構造体や
  2. 少なくとも、予想以上に大きな char 配列を宣言してください (最良の方法とは言えませんが、少なくともこのエラーは発生しなかったはずです)。

もしあなたが、quot; guess the biggest size for my array".という方法を取っているのであれば、この方法を試してみてください。 のルートを進んでいる場合、一番避けたいことは、配列のサイズを正確に数えることです。 バッファの大きさは、最後の1文字まで。 1バイトでもずれると、クラッシュする可能性があります。