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

C++ 使用GetDlgItemText()函数时如何计算LPWSTR大小,c++,winapi,C++,Winapi,我的要求很小 我正在使用GetDlgItem()从文本字段获取文本,但第四个参数(即缓冲区大小)有问题 如何计算txtbuff的大小?您需要自己分配一个缓冲区: WCHAR txtbuff[50]; GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, 50); /* or... */ GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(textbuff)/sizeof(textbuff[0])); MessageBox(N

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


如何计算txtbuff的大小?您需要自己分配一个缓冲区:

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

您可以像这样使用
sizeof

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

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


您可以使用来获取控件的HWND,并确定控件包含多少个字符。

对不起,我指的是字符串中的字符数在您的代码中,您添加了一个特定的数字[50],我不知道字符数对不起,但您需要提前知道用于GetDlgItemText的缓冲区的最大长度。在代码中,您使用的是LPWSTR,它是指向WCHAR的指针,因此需要在之前分配内存。不是这样。您可以询问控件缓冲区需要多大才能容纳整个文本。是的,这是正确的,但这意味着您需要在真正调用GetDlgItemText之前提前获得大小。问题是确定字符,因为当用户输入值时,我不知道它们的编号。@Lion King可能您不理解之前需要分配内存。如果您需要知道用户输入的长度,请使用GetWindowTextLength
TCHAR txtbuff[50];
GetDlgItemText(hwnd, IDC_EDIT1, txtbuff, sizeof(txtbuff) * sizeof(TCHAR));