使用 strlen 在 winapi 中获取字符串长度
Getting string length in winapi with strlen
我正在尝试获取缓冲区的长度,但出现未处理的异常错误。
谁能帮帮我。我做错了什么?
case WM_COMMAND:
switch (LOWORD(wp))
{
case IDC_MAIN_BUTTON:
{
char buffer[256];
SendMessage(hEdit,
WM_GETTEXT,
sizeof(buffer) / sizeof(buffer[0]),
(LPARAM*)(buffer));
int bl = strlen(buffer);
MessageBox(NULL,
bl,
"Information",
MB_ICONINFORMATION);
}
break;
}
MessageBox
的第二个参数是指向 TCHAR
的指针。你传递了一个整数(至少应该得到一个合适的警告)。
您必须先将整数转换为字符串表示形式,例如在非 Unicode 构建中:
int bl = strlen(buffer);
char buf[20];
_snprintf(buf, sizeof(buf), "%d", bl);
MessageBox(NULL, buf, "Information", MB_ICONINFORMATION);
(注意:代码未经测试。)
除了 by M Oehm还有两个问题:
SendMessage()
的结果未经测试。
- 传递的缓冲区未初始化并在任何情况下传递给
strlen()
,因此如果未设置为 C-"string",则至少包含一个 '[=14=]'
作为 0
终止符,对 strlen()
的调用将失败。
要解决这个问题至少要改变这个:
char buffer[256];
成为
char buffer[256] = "";
我正在尝试获取缓冲区的长度,但出现未处理的异常错误。 谁能帮帮我。我做错了什么?
case WM_COMMAND:
switch (LOWORD(wp))
{
case IDC_MAIN_BUTTON:
{
char buffer[256];
SendMessage(hEdit,
WM_GETTEXT,
sizeof(buffer) / sizeof(buffer[0]),
(LPARAM*)(buffer));
int bl = strlen(buffer);
MessageBox(NULL,
bl,
"Information",
MB_ICONINFORMATION);
}
break;
}
MessageBox
的第二个参数是指向 TCHAR
的指针。你传递了一个整数(至少应该得到一个合适的警告)。
您必须先将整数转换为字符串表示形式,例如在非 Unicode 构建中:
int bl = strlen(buffer);
char buf[20];
_snprintf(buf, sizeof(buf), "%d", bl);
MessageBox(NULL, buf, "Information", MB_ICONINFORMATION);
(注意:代码未经测试。)
除了
SendMessage()
的结果未经测试。- 传递的缓冲区未初始化并在任何情况下传递给
strlen()
,因此如果未设置为 C-"string",则至少包含一个'[=14=]'
作为0
终止符,对strlen()
的调用将失败。
要解决这个问题至少要改变这个:
char buffer[256];
成为
char buffer[256] = "";