"LPWSTR" 类型的实参与"const.char *"类型形参不兼容
- CString csPlus;
- CString csSummand;
- m_PlusNumber.GetWindowTextW(csPlus);
- m_Summand.GetWindowTextW(csSummand);
- int nPlus = atoi(csPlus.GetBuffer(0)); //将编辑框文本转换成整数
- // int nPlus = atoi(strcpy(csPlus.GetBuffer(10),"aa"));
- csPlus.ReleaseBuffer();
- int nSummand = atoi(csSummand.GetBuffer(0));
- csSummand.ReleaseBuffer();
- int nRet = nPlus + nSummand;
- char chRet[128] = {0}; //将结果装换成字符串
- itoa(nRet,chRet,10);
- m_Result.SetWindowTextW(chRet);
在 5 8 13 行处会报错
原因分析:
这些代码在VC6 下面是可以的 在VC2010下不能通过
VC6默认使用字符ANSII编码方式
VC2010默认使用UNICODE编码方式
为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数 量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。
CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。
在ANSII和UNICODE两种情况下,TCHAR的字符位数不一样,所以会有这样的报错。
最简单的解决方法是工程右键属性 修改编码方式从unicode改为多字节字符集。
在VC2010中 将CString转换成char 应该使用 _wtoi
5 ,8修改为:
- int nPlus = _wtoi(csPlus.GetBuffer(0));
- int nSummand = _wtoi(csSummand.GetBuffer(0));
对13行的修改 修改为:
可添加声明
- CString csRet;
字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值
将chRet赋给csRet
- csRet = chRet;
最后一行修改为
- m_Result.SetWindowTextW(csRet);
对13行的修改更简化应该为寻找一种将int型转换成CString的方法。
在VC6中可以直接
- csRet.Format("%d",nRet);
但是在2010中不适用。
在VC2010中应该这样写
- csRet.Format(_T("%d"),nRet);
OK 修改完成 可以运行
"LPWSTR" 类型的实参与"const.char *"类型形参不兼容的更多相关文章
- CString 转化成 const char* 类型
写程序的时候经常会遇到无法将“CString”转换为“const char *”的错误,这里我找到了一个解决办法,与大家分享下: CString cs = _T("); ) * ; char ...
- vs2017中char* str = "1234asd56";会报错,——const char*类型的值不能用于初始化char*类型的实体
原因: "1234asd56"是常量 ,正确的写法本身就是:const char* str = "1234asd56"; 之所以之前的vs版本可以写成char* ...
- Error:“const char*”类型的实参与“wchar_t”类型的形参不兼容
MainApp\RPolarView.cpp(1571): error C2664: “ATL::CStringT<BaseType,StringTraits>::ReverseFind” ...
- Qt QString 与 const char* 类型的转换
QString DATA; std::string str = DATA.toStdString(); const char* ch = str.c_str();
- Error:const char* 类型的实参和LPCWSTR类型的形参不兼容的解决方法。
在C++的Windows 应用程序中经常碰到这种情况. 解决方法: 加入如下转换函数: LPCWSTR stringToLPCWSTR(std::string orig) { size_t origs ...
- VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法
C++项目中经常会定义如下形式的字符串: char *texts[] = { "1. Open Account", "2. To Deposit Money", ...
- "const char *" 类型的值不能用于初始化 "char *" 类型的实体
用vs2019发现会出现这样的问题 最后发现只要设置一下就解决了,解决方案如下: 右击该项目,选择属性->c/c++->语言->将符合模式改为否就行了... 设置之后程序没有再报错, ...
- Vs2017编译器提示:不能将“const char *”类型的值分配到“char *”类型的实体
在项目属性中将语言符合模式改成否即可
- 在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?
今天在做 COS脚本解释器的时候,遇到了这个问题 先了解一下 LPCTCHAR 这个东东 LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么 ...
随机推荐
- emmet缩写格式
2016年5月30日 10:10 标准网页<!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...
- ARDUINO使用GPRS发送GPS数据到OneNet测试
功能: 测试把固定的GPS数据发送到OneNet平台 调试途中碰到的问题 ARDUINO不支持sprintf的double打印,只能转换为char字符串然后再%s打印 #include <Tim ...
- 使用JavaScript定义一个微信小程序插件样例
var wxTimer = new wxTimer({ beginTime: "00:00:20", complete: function () { wx.redirectTo({ ...
- MD5加密“破解”在.NET平台实现最基本的理解
MD5作为一种散列算法,广泛用于密码传输过程中的“加密”(引号的意思是这并不是真正的加密,而是形成密码的散列值)过程.MD顾名思义Message Digest(报文摘要),可以将输入的密码,一般来说为 ...
- var妙用
var广泛使用其实也有用的.比如在一些不太确定类型的地方 (比如要区分int/uint/long/double的时候),用泛型太牛刀而不用又觉得不灵活的时候,其实是比较推荐var的比如设计某种类的时候 ...
- Linux电源管理(2)-Generic PM基本概念和软件架构【转】
本文转载自:http://www.wowotech.net/pm_subsystem/generic_pm_architecture.html 1. 前言 这里的Generic PM,是蜗蜗自己起的名 ...
- Node教程
本人的博客写了node的教程,从零开始,一步一步的通过例子讲解,希望喜欢的同学给我的github上加颗星,谢谢! github地址:https://github.com/manlili/node_le ...
- Servlet的过滤器(Fliter)
Servlet过滤器与Servlet十分相似,但具有拦截客户端(浏览器)请求的功能,可以改变请求中的内容来满足实际开发的需求.对于开发人员而言,过滤器实质就是在Web应用服务器上的一个Web应用组件, ...
- linux学习-文件打包与压缩
- Python- 列表内置方法
列表,元组 查 索引(下标) ,都是从0开始 切片 .count 查某个元素的出现次数 .index 根据内容找其对应的位置 "haidilao ge" in a 增加 a.app ...