我试图按如下方式更改MFC窗口的标题:

BOOL CameraUI::OnInitDialog()
{
    // set ui title
    TCHAR wintitle[100];
    _stprintf_s(wintitle, sizeof wintitle, _T("Camera %u"), (UINT) getSerialNumber());
    SetWindowText(wintitle);
return TRUE;
}

调试时,在函数末尾出现此错误:
Run-Time Check Failure #2 - Stack around the variable 'wintitle' was corrupted.

我正在使用MSVC2008。我在做什么错?!

最佳答案

不要按原样使用sizeof winTitle
_stprintf_s函数需要characters的数目,而不是bytes的数目。

http://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx

由于显然您正在使用TCHAR,因此字符数如下:

sizeof(winTitle) / sizeof(winTitle[0])

要么
sizeof(winTitle) / sizeof(TCHAR)

MS世界中的TCHAR将是1个字节(如果内部版本为MBCS)或2个字节(即Unicode)。

假设您正在使用Unicode,只需声明sizeof winTitle,即可指定数组最多可容纳200个字符,但这不是正确的(显示sizeof winTitle给您的内容,您会看到它为200)。

关于c++ - MFC中设置UI标题时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23617575/

10-11 17:52