正在使用未初始化的变量
A variable is being used without initialized
我正在阅读这个 http://www.winprog.org/tutorial/window_click.html而且我在代码上遇到了问题。我使用的是VS 2012,而不是char*
或const char*
我必须使用LPCWSTR
或LPWSTR
。
这种特殊情况下,问题出在交换机上
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];
相关文章:
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 在 C++ 中访问 lambda 捕获初始化变量
- 为什么C++不支持对未初始化变量进行智能分析?
- 使用 clang++ 和 g++ 在C++中初始化变量
- C++使用 lambda 初始化变量
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++ - 输出与初始化变量不同?
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 具有静态存储持续时间的常量初始化变量的初始化顺序
- C++ 中的初始化变量
- C++中未初始化变量的值
- 如何在需要提及需要循环声明的其他类的类中初始化变量?
- 我想知道在构造函数中初始化变量时的生命周期
- 读取恰好具有良好值的未初始化变量
- 如何在 getter 的父类中初始化变量的情况下访问子类中的变量
- 为什么在 c++ 中有多种初始化变量的方法
- 没有参数的默认构造函数是否总是初始化变量?
- 是否可以使用 lambda 初始化变量(删除复制 ctor 时)
- 使用构造函数跳闸UB的新放置后使用初始化变量