错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
error C2664: 'errno_t wcstombs_s(size_t *,char *,size_t,const wchar_t *,size_t)' : cannot convert parameter 4
错误C2664:'errno_t wcstombs_s(size_t*,char*,size_t,const wchar_t*,size_t)':无法将参数4从'char[260]'转换为'const wchar_t*'1>
指向的类型不相关;转换需要reinterpret_cast、C样式强制转换或函数样式强制转换
这个错误意味着什么?
我的功能是:
BOOL DependentDLLDisplay()
{
char arr[200];
if(!Module32First(hProcessSnap,&me32))
{
cout<<" ERROR : Failed to Get DLL Information"<<endl;
CloseHandle(hProcessSnap);
return FALSE;
}
cout<<endl<<"DEPENDENT DLL OF THIS PROCESS :"<<endl;
do
{
wcstombs_s(NULL,arr,200,me32.szModule,200);
cout<<arr<<endl;
}while(Module32Next(hProcessSnap,&me32));
CloseHandle(hProcessSnap);
return TRUE;
}
您的对象me32
属于此处定义的MODULEENTRY32
类型:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms684225.aspx
作为"wcstombs_s"的第四个参数传递的szModule
字段定义为:
TCHAR szModule[MAX_MODULE_NAME32 + 1];
在Windows API中,TCHAR
在MBCS编码中被定义为char
,而在UNICODE编码中被指定为wchar
。
您看到的错误表明您包含了Windows库的MBCS版本,因此MODULEENTRY32
实际上是MODULEENTRY32A
,me32.szModule
是char[]
,但随后试图将me32.szModule
视为宽wchar_t[]
字符串,而实际上它是Ansichar[]
字符串。
您可以通过更改项目设置切换到UNICODE库,也可以使用普通的char
字符串副本来获取该字段的值。
或者,正如雷米所说:
或者,您可以显式使用
Module32FirstW()
/Module32NextW()
,MODULEENTRY32W
、std::wcout
等,或显式使用Module32FirstA()
/Module32NextA()
、MODULEENTRY32A
等。不管怎样,你不必更改项目设置。不要使用基于TCHAR
的API不再在这种情况下,由于代码希望以char[]
结束字符串,使用Module32FirstA()
/Module32NextA()
和只需完全去除CCD_ 26即可。
最后一点注意:您可能应该将本地变量扩展为与szModule
相同的大小,而不是可能截断内容。
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 无法将'int (*)[size]'转换为'int**'
- 错误 C2664: 'cv::Mat::Mat(int,int,int)' : 无法将参数 1 从 'cv::Size' 转换为 'int'