1
當試圖使用MessageBox函數顯示一個win32對話框時,文本似乎被切斷,但奇怪的是,這隻發生在構建釋放時,這讓我完全感到困惑。Win32 MessageBox截斷文本
代碼這一現象的:
wchar_t filepath[ MAX_PATH ];
GetModuleFileName(NULL, filepath, MAX_PATH);
wchar_t* fnp = PathFindFileName(filepath);
wchar_t filename[MAX_PATH];
swprintf(filename, MAX_PATH, L"%ls", fnp);
printf("%ls", filename);
wchar_t* pwc;
pwc = wcsstr(filename,L".exe");
wcsncpy(pwc,L"_real.exe\0",10);
if(!file_exists(filename)){
wchar_t buff[] = L"unable to start because %ls cannot be found.";
wchar_t say[MAX_PATH+sizeof(buff)-3];
swprintf(say, wcslen(say), buff, filename);
MessageBoxW(NULL, say, L"Error", MB_OK | MB_ICONERROR);
return 0;
}
這似乎已經解決了這一問題,但出於純粹的好奇心,你不會碰巧知道爲什麼它工作在調試環境中,你會嗎? –
這是未定義的行爲會發生什麼。任何事情都可能發生,甚至程序工作。 –
如果你不關心可移植性,你可以使用'_countof(say)'作爲替代。 –