1

今朝、非常に奇妙な問題を見つけましたが、解決策が見つかりません。以下のコードでこの問題を解決してください (Visual Studio C++ と MFC を使用):

FILE *fp = NULL;
//fp = fopen(mmFileName , "a");
//Store the module directory path
fopen_s( &fp , "TempWorking.xml" , "wb");
//char* TempChar;
CString strtempff;
strtempff = "\"<article>  <section class="page"><p>Writing for the clown show that is <em>Forbes</em>, Darcy Travlos asks the <a href="http://en.wikipedia.org/wiki/Betteridge%27s_law_of_headlines">Betteridge’s Law</a>-challenging question “Apple And Google: The New ‘Old’ Reality?†(No link but tip o’ the an";
char* TempArray;
TempArray = new char[strtempff.GetLength()];
strcpy(TempArray,strtempff.GetString());
strtempff = "";
strtempff.Empty();
fprintf(fp,(char*)TempArray);

ステートメントでコードが機能しない理由がわかりませんfprintf()。デバッグ アサーションが表示されます。strtempffはネットから収集されたもので、コードの例にすぎません。

4

2 に答える 2

1

関数には 0 ターミネータが含まれCString::GetLength()ていないため、小さすぎる配列を宣言しています。

たとえば、CStringが「a」の場合GetLength()は 1 を返し、TempArray1 文字の a を割り当てますが、文字列strcpy()終了するため 2 文字を書き込み、バッファ オーバーフローと未定義の動作を引き起こします。

于 2013-05-24T13:34:20.363 に答える