2011-02-05 62 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

相關問題