2011-02-05 28 views
1

我在下面两行代码:定义缓冲区大小正确的“堆栈周围的变量字符串已损坏”

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

当我使用这种方式我有时会得到一个运行时错误:“堆栈周围的变量字符串被损坏”

当我使用

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

它的工作原理没有问题。但我认为关于使用sizeof()的全部内容是确保没有溢出问题....为什么sizeof(String)不安全,我可以使用什么?

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

+0

你为什么不使用`GetWindowText`功能?为什么你在地球上使用Windows 9x兼容性方案?你真的*计划​​支持Windows 95链接到MFC DLL的应用程序吗? – 2011-02-05 19:47:56

回答

5

您正在使用的wchar_t,的sizeof(字符串)将是800,而不是400修复:

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

谢谢!它总是这些小东西...... – Lumpi 2011-02-05 18:48:33

相关问题