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

Getting string length in winapi with strlen

本文关键字:字符串 strlen 获取 winapi 使用      更新时间:2023-10-16

>我正在尝试获取缓冲区的长度,但出现未处理的异常错误。谁能帮我。我做错了什么?

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

(警告:代码未测试。

除了M Oehm提到的错误之外,这里还有两个问题:

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

要解决此问题,请至少更改此设置:

char buffer[256];

成为

char buffer[256] = "";