std::string
C++ WinAPI アプリケーションでC 文字列と sa を少し簡単に結合する関数を作成しようとしています。
したがって、これを行う代わりに:
TCHAR res[MAX_PATH];
_stprintf(res, _T("In functionX(): error occured where the variable values are %d, %u, %s, %c"), myInt, myUnsignedInt, myStr.c_str(), myChar);
MessageBox(NULL, res, _T("Error Occurred"), MB_OK);
これを行う必要があります (どこでも TCHAR 配列を宣言し続ける必要がないため、異なる文字列型をマージするのが少し簡単になります):
tstring res = concat(_T("In functionX(): error occured with the variable values %d, %u, %s, %c"), myInt, myUnsignedInt, myStr.c_str(), myChar);
MessageBox(NULL, (LPTSTR)res.c_str(), _T("Error Occurred"), MB_OK);
私の問題:私の関数concat(); パラメータ形式内で複数の変数を渡すと失敗し、その理由がわかりませんか?
// The following function call causes the error
tstring ou = concat(_T("In functionX(): Failed to create temp file - %s - %s\r\n"), (LPTSTR)tempFileRootDir.c_str(), tempFile);
tstring WinFile::concat( TCHAR* strFormat, TCHAR* format, ... )
{
// tstring is either a std::string or std::wstring depending on whether unicode is used
// Post: Wrapper function to easily merge C++ strings with C Strings
va_list arguments;
va_start(arguments, format);
TCHAR res[MAX_PATH];
_stprintf(res, strFormat, format);
return tstring(res);
}
Microsoft Visual C++ で関数を実行すると発生するエラーは次のとおりです。
Application.exe でバッファ オーバーランが発生し、プログラムの内部状態が破壊されました。Break を押してプログラムをデバッグするか、Continue を押してプログラムを終了します。
詳細については、ヘルプ トピック「バッファ オーバーランの問題をデバッグする方法」を参照してください。