使用 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还有两个问题:

  1. SendMessage() 的结果未经测试。
  2. 传递的缓冲区未初始化并在任何情况下传递给 strlen(),因此如果未设置为 C-"string",则至少包含一个 '[=14=]'作为 0 终止符,对 strlen() 的调用将失败。

要解决这个问题至少要改变这个:

char buffer[256];

成为

char buffer[256] = "";