lpcwstr与char类型不匹配(到 LPCWSTR 的类型不兼容,这是怎么回事啊)

本文目录
- 到 LPCWSTR 的类型不兼容,这是怎么回事啊
- VC++ LPWSTR类型的实参与char*类型的形参不兼容
- LPWSTR和char*是什么关系,这段代码求解决问题
- LPCWSTR无法转换char
- const char *“ 类型的实参与 “LPCWSTR“ 类型的形参不兼容
- 在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决
到 LPCWSTR 的类型不兼容,这是怎么回事啊
开头#include 《TCHAR.h》
sprintf(...)
改为
_stprintf(...)
然后所有双引号字符串或单引号的字符
"Mouse Clicking" ’A’
这样的都改为
_T("Mouse Clicking") _T(’A’)
所有
char
改为
TCHAR
原因在于字符(串)实际上有char(*)(LPSTR,LPCSTR)和wchar_t(*)(LPWSTR,LPCWSTR)两种类型,这两种类型有各自的一套字符串操作函数(包括基础库、windowsAPI等都是),而windows程序通常会默认使用wchar_t系列,因此所有字符串都需要wchar_t*类型,所有函数都用wchar_t匹配的函数。
而_T()则是自动将字符串转换为对应类型的字符串,_stprintf函数(实际上是宏)会自动匹配应有的函数(char匹配sprintf,wchar_t匹配swprintf)
事实上所有涉及字符串的函数大多都是三个一组的,比如图中涉及的有:
sprintf,swprintf,_stprintf
MessageBoxA,MessageBoxW,MessageBox
……
三个函数依次为:char专用函数,wchar_t专用函数,变化匹配函数(虽设置环境自动匹配char或wchar_t)
VC++ LPWSTR类型的实参与char*类型的形参不兼容
在UNICODE字符集下,CString存储方式是WCHAR宽字节。
如果你的加密算法始终要求char模式,那么放弃使用CString直接使用char* 就可以了。
如果无法避免宽字节字符串,那么安全的办法是通过WideCharToMultiByte函数,将UNICODE字符串转换为宽字节的char*在进行DES加密。
变通的办法(存在字符串转换的隐患)是直接将WCHAR通过内存复制方式给char*进行加密,复制长度为:ytr.GetLength()*sizeof(TCHAR)
LPWSTR和char*是什么关系,这段代码求解决问题
这是UNICODE的问题, vc里项目“属性-》常规-》字符集”这个选项控制是使用unicode还是多字节, unicode对应的就是LPWSTR, 16位, 多字节就是char, 8位。 LPWSTR的最终宣告是unsigned short, 可见是16位的。MFC里有一个很容易的unicode转ansi的宏, USES_CONVERSION, 通过W2A就可以把LPWSTR转换为char*
LPCWSTR无法转换char
1e:\vs2008\实验\实验\c.cpp(28) : error C2440: “=”: 无法从“const char ”转换为“LPCWSTR”1 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换1e:\vs2008\实验\实验\c.cpp(74) : error C2146: 语法错误 : 缺少“)”(在标识符“,”的前面)1e:\vs2008\实验\实验\c.cpp(74) : error C2660: “MessageBoxW”: 函数不接受 2 个参数1e:\vs2008\实验\实验\c.cpp(74) : error C2059: 语法错误 : “)”1e:\vs2008\实验\实验\c.cpp(80) : error C2664: “PostQuitMessage”: 不能将参数 1 从“HWND”转换为“int”1 没有使该转换得以执行的上下文1e:\vs2008\实验\实验\c.cpp(83) : error C3861: “DelWindowProc”: 找不到标识符1生成日志保存在“file://e:\vs2008\实验\实验\Debug\BuildLog.htm”1实验 - 13 个错误,0 个警告========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========补充:
const char *“ 类型的实参与 “LPCWSTR“ 类型的形参不兼容
修改如下:把工程属性 -》 配置属性 -》常规 -》 字符集 的“使用unicode字符集“改为“使用多字节字符集”。
在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决
LPCWSTR是宽字符集,每个字符占两个字节运歼键
char西旁巧文占一个字节,中文改历占两个字节
如果想完全搞清楚这个问题, 会自己转换,去好好学一下unicode

更多文章:
idea控制台乱码(idea 输出 System.out.println() 控制台乱码)
2026年10月14日 07:30
spring事务的作用(为什么要使用spring的事务,一般在什么情况下使用)
2026年10月14日 05:40
linux怎么进入命令行(怎么样配置linux使其启动时直接登录到命令行模式)
2026年10月14日 02:00
java培训机构好还是大学好(大学生想转行学java,该去java培训班还是自学呢)
2026年10月13日 23:30
前端面试必背十个点(资深HR揭秘:Web前端面试技巧有哪些)
2026年10月13日 17:50
sqlplus重置用户名密码(Oracle中的plus的用户名和密码忘了怎么办)
2026年10月13日 17:40






