正在使用未初始化的变量

A variable is being used without initialized

本文关键字:初始化 变量      更新时间:2023-10-16

我正在阅读这个 http://www.winprog.org/tutorial/window_click.html而且我在代码上遇到了问题。我使用的是VS 2012,而不是char*const char*我必须使用LPCWSTRLPWSTR

这种特殊情况下,问题出在交换机上

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam,
    LPARAM lParam)
{
    switch(msg)
    {
        case WM_LBUTTONDOWN:
        {
            LPWSTR szFileName;
            HINSTANCE hInstance = GetModuleHandle(NULL);
            GetModuleFileName(hInstance, szFileName, MAX_PATH);
            MessageBox(hwnd, szFileName, L"This program is:",
                MB_OK | MB_ICONINFORMATION);
        }
        break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
        PostQuitMessage(0);
    break;
    default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

我使用 LPWSTR 而不是教程中显示的字符并对其进行编译,但是当我单击窗口而不是显示信息窗口时,会出现错误:

The variable 'szFileName' is being used without being initialized.

据我了解,GetModuleFileName()应该将信息写在开始时为空的szFileName中,所以我无法真正理解问题所在。

来自GetModuleFileName()的文档:

lp文件名 [输出]

指向接收模块的完全限定路径的缓冲区的指针。如果路径的长度小于 nSize 参数指定的大小,则函数成功,并且路径将作为以 null 结尾的字符串返回。

你给了它一个指针,但它是指向无限混乱的指针。您尚未实际分配缓冲区。

现在就继续这样做:

wchar_t szFileName[MAX_PATH];
GetModuleFileName(hInstance, szFileName, MAX_PATH);

你需要声明一个数组,LPWSTR只是一个指针

所以改变

LPWSTR szFileName;

wchar_t szFileName[MAX_PATH];