定义缓冲区大小正确“堆栈变量String已损坏”

时间:2011-02-05 18:21:54

标签: c++

我的代码中有这两行:

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,sizeof(String), (LPARAM)String);

当我以这种方式使用它时,我有时会遇到运行时错误:“变量String周围的堆栈已损坏”

当我使用

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,10, (LPARAM)String);

它没有问题。但我认为使用sizeof()的全部事情是确保没有溢出问题....为什么sizeof(String)不安全,我可以使用什么?

谢谢!祝你有愉快的一天!

1 个答案:

答案 0 :(得分:5)

您正在使用wchar_t,sizeof(String)将为800,而不是400.修复:

wchar_t String[400] = 0;
SendMessageW(hwnd, WM_GETTEXT, sizeof(String) / sizeof(wchar_t), (LPARAM)String);