我正在尝试获取缓冲区的长度,但是我得到了未处理的异常错误。 请有人帮帮我。我做错了什么?
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;
}
答案 0 :(得分:2)
MessageBox
的第二个参数是指向TCHAR
的指针。你传递一个整数(至少应该得到一个合适的警告)。
首先必须将整数转换为字符串表示形式,例如在非Unicode构建中:
int bl = strlen(buffer);
char buf[20];
_snprintf(buf, sizeof(buf), "%d", bl);
MessageBox(NULL, buf, "Information", MB_ICONINFORMATION);
(警告:代码未经过测试。)
答案 1 :(得分:0)
the mistake mentioned除M Oehm之外还有两个问题:
SendMessage()
的结果未经过测试。strlen()
,因此如果没有设置为C-“字符串”,则至少包含一个'\0'
作为{ {1}} - 终结者,对0
的调用将失败。要解决这个问题,至少要改变一下:
strlen()
成为
char buffer[256];