用strlen获取winapi中的字符串长度

时间:2015-01-18 11:10:06

标签: c++ c winapi visual-c++ sendmessage

我正在尝试获取缓冲区的长度,但是我得到了未处理的异常错误。 请有人帮帮我。我做错了什么?

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;
}

2 个答案:

答案 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 mentionedM Oehm之外还有两个问题:

  1. SendMessage()的结果未经过测试。
  2. 传递的缓冲区未初始化,并且在任何情况下都会传递给strlen(),因此如果没有设置为C-“字符串”,则至少包含一个'\0'作为{ {1}} - 终结者,对0的调用将失败。
  3. 要解决这个问题,至少要改变一下:

    strlen()

    成为

    char buffer[256];