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

Lum*_*mpi 1 c++

我的代码中有这两行:

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,sizeof(String), (LPARAM)String);
Run Code Online (Sandbox Code Playgroud)

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

我用的时候

TCHAR String[400] = {0};
SendMessageW(hwnd, WM_GETTEXT,10, (LPARAM)String);
Run Code Online (Sandbox Code Playgroud)

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

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

Han*_*ant 5

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

wchar_t String[400] = 0;
SendMessageW(hwnd, WM_GETTEXT, sizeof(String) / sizeof(wchar_t), (LPARAM)String);
Run Code Online (Sandbox Code Playgroud)