0

VS 2008 を使用する C++ コンソール アプリケーションで、sprintf メソッドを使用して、ファイルに書き込みたい文字列にデータをフォーマットしました。入力は、さまざまな変数と値を持つ特定のメッセージです (例: Type 'int' and Value ' 10' / タイプ文字列と値 "abc" など) 2 つのメッセージを送信すると、完全に機能します。しかし、2 つ以上のメッセージを送信すると、0xC0000005: Access violation reading location 0xababababという実行時エラーが発生します。なぜこうなった?メソッド「sprintf」にデフォルトのバッファ長があるためですか?どうすればこの問題を克服できますか?

4

2 に答える 2

1

ちなみに、このページをご覧になることをお勧めします。

0xABABABAB:割り当てられたヒープメモリの後に「人の土地がない」ガードバイトをマークするためにMicrosoftのHeapAlloc()によって使用されます

于 2010-06-08T20:36:05.580 に答える
1

いいえ、デフォルトのサイズはありません。十分なスペースがあると想定し、フォーマット文字列で指定された分だけ書き込みます。

アクセス違反はreadingと表示されます。これは、引数に何か問題がある可能性があることを示唆しています。おそらく、それらは書式設定文字列と一致しません。

%フォーマット文字列で -codes を使用して参照するのと同じ数の引数を、適切な型と正しい順序で正確に持つ必要があります。

于 2010-03-31T08:50:36.903 に答える