如何在使用GetDlgItemText()函数时计算LPWSTR大小

How to compute LPWSTR size when using GetDlgItemText() function

本文关键字:函数 计算 LPWSTR 大小 GetDlgItemText      更新时间:2023-10-16

我的请求很小我使用GetDlgItem()从文本字段中获取文本,但在第四个参数(即缓冲区大小)中出现问题。

LPWSTR txtbuff;
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50); // the fourth parameter (50)
MessageBox(NULL,txtbuff,L"Error message",MB_OK)

如何计算txtbuff

的大小

您可以使用GetDlgItem获取控件的HWND和GetWindowTextLength来确定控件包含的字符数。

您需要自己分配一个缓冲区:

WCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50);
/* or... */
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(textbuff)/sizeof(textbuff[0]));
MessageBox(NULL, txtbuff, L"Error message", MB_OK);

一个简单的LPWSTR变量是一个指针,在您的示例中,您有一个指针但它还没有指向任何位置。通过显式创建缓冲区,可以指定大小,并可以将其提供给GetDlgItem

这不是缓冲区的大小。它是您实际想要复制的字符串的数量。理论上,你可以将其设置为任何你想要的非零大小。另一方面,你自己缓冲区的大小是另一回事,只是要确保你不会溢出。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645489%28v=vs.85%29.aspx

您可以像这样使用sizeof

TCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(txtbuff) * sizeof(TCHAR));