今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错。
如下::不能将参数1从“const char []”转换为“LPCTSTR”

其解决方案就是, 在项目属性里面找到项目默认值下面的字符集, 将其换为:使用多字节字符集就ok了。
原因:

typedef   LPCTSTR    LPTSTR ;
#ifndef   _UNICODE  
    typedef   TCHAR   char;  
#else  
    typedef   TCHAR   wchar_t;  
#endif  
   
  typedef   LPTSTR   const   TCHAR*;  
看到一篇很好的讲字符集(charset)转载过来。。感谢freebot楼主。

LPSTR、LPCSTR、LPTSTR和LPCTSTR的意义及区别

1、ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和

ASCII一样,但表示其他文字时就需要用多字节。

2、Unicode:用两个字节表示一个字符的编码方式。比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充;函数'程'在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表示。Unicode的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。

3、Windows下的程序设计可以支持ANSI和Unicode两种编码方法的字符串,具体使用哪种就要看定义了

MBCS宏还是Unicode宏。MBCS宏对应的字符串指针为LPSTR(即char*),Unicode对应的指针为

LPWSTR(即unsigned char*)。为了写程序的方便,微软定义了类型LPTSTR,在MBCS下它表示char*,

在Unicode下它表示unsigned char*,这就可以重定义一个宏进行不同字符集的转换了。

4、关系

LPSTR:指向一个字符串的32位指针,每个字符占1个字节。

LPCSTR:指向一个常量字符串的32位指针,每个字符占1个字节。

LPTSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2个字节。

LPCTSTR:指向一个常量字符串的32位指针,每个字符可能占1个字节或2个字节。

5、Windows使用两种字符集ANSI和Unicode,前者在处理英文字符时使用单字节方式,在处理中文字符时使用双字节方式。后者不管是英文字符还是中文字符都是采用双字节方式表示。Windows NT的所有与字符有关的函数都提供了两种方式的版本,而Windows 9x只支持ANSI方式。_T一般同字符常量相关,如_T("你好!");。如果编码方式为ANSI,_T不起任何作用;如果编码方式为Unicode,编译器会把"你好!"以Unicode方式进行保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以Unicode方法保存。

6、L表示字符串资源采用Unicode编码方式,示例如下:

wchar_t Str[]=L"Hello World!"; //每个字符都用2个字节来存储

7、_T是一个适配宏。当定义了_UNICODE时,_T和L相同;否则,_T的字符串采用ANSI编码方式。示例如

下:

LPTSTR lptStr=new TCHAR[32];

TCHAR* szBuf=_T("Hello");

以上两个语句,无论是在ANSI编码方式,还是在Unicode编码方式下都是正确的。

8、微软推荐使用相匹配的字符串函数。例如,在处理LPTSTR或LPCTSTR的时候,应该使用_tcslen来替

代strlen函数。否则,在Unicode编码方式下,strlen不能处理wchar_t*的字符串。

9、T是一个非常重要的符号(TCHAR、LPTSTR、LPCTSTR、_T()和_TEXT()等),它表示使用一个中间

类型,既不明确表示使用MBCS,也不明确表示使用Unicode。到底使用哪种字符集,在编译的时候才决

定。

10、CString类型到LPTSTR类型的转换

CString path1;

LPTSTR path2=path1.GetBuffer(path1.GetLenght());

不能将参数1从“const char []”转换为“LPCTSTR的更多相关文章

  1. error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

    在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章: http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html 通过调 ...

  2. VS2010 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [3]”转换为“LPCTSTR”

    VS2010 (VC2010)建立工程时默认的字符集是Unicode,所以在代码中使用MessageBox时需要输入Unicode,用TEXT()这个宏输入参数,否则会报错:   代码:Message ...

  3. error: C2664: “zajiao::zajiao(const zajiao &)”: 无法将参数 1 从“const char [12]”转换为“char *”

    原本打算在QT用一个字符串"ABCDEF12345"作为类zajiao的构造函数的参数,用来创建类zajiao的对象zajiao1. zajiao zajiao1("AB ...

  4. C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案

    问题出现 编译平台:VS2013     Windows 出现地方:在使用LoadLibrary( )函数动态链接DLL文件时出现的一个问题 Eg.   在使用 UNICODE字符的工程中,  HIN ...

  5. error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR”

    vs2008提示 error C2664: “CWnd::MessageBoxW”: 不能将参数 1 从“const char [17]”转换为“LPCTSTR” 在外面用vs2005编写mfc程序的 ...

  6. error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”

    转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...

  7. 不能从const char *转换为LPCWSTR --VS经常碰到

    不能从const char *转换为LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005.vs2008.vs2010中常会出现类型错误. 经常出现的错误是:不能从const ch ...

  8. (转)const char to LPCTSTR不能转化问题

    转: const char to LPCTSTR不能转化问题 Visual C++ 2008里cannot convert parameter 1 from 'const char [13]' to ...

  9. 无法从“const char *”转换为“char *”

    写了如下的一段代码: const char *str; char *p=str; 提示错误: const char* 不能用于初始化char *类型的实体.这是为什么?我想应该是const char ...

随机推荐

  1. cydia源

    http://apt.91.com http://apt.178.com Flex 2的官方安装源是 getdelta.co

  2. lr如何获取当前系统时间戳

    lr如何获取当前系统时间戳 一般使用time函数,获取当前unix时间戳 lr程序如下: int t1; char a[20]; t1=time();//获取当前系统时间 //根据不同情况,将时间存储 ...

  3. 理解并使用.NET 4.5中的HttpClient(转)

    原文地址:http://www.cnblogs.com/wywnet/p/httpclient.html HttpClient介绍HttpClient是.NET4.5引入的一个HTTP客户端库,其命名 ...

  4. 添加space_key, enter_key, clear_key, delete_key的处理。

    final EditText view = (EditText) mInflater.inflate(R.layout.sms_receipient_input, null); view.setOnK ...

  5. AbatorForEclipse插件使用总结

    AbatorForEclipse是IbatorForEclipse之前的一个老版插件.插件装好后,我们来使用看看:1,新建一个工程AbatorTest,点击右键,新建一个abatorConfig.xm ...

  6. HDUOJ-----Brave Game

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. 深入理解SpringBoot配置

    一.application.properties的位置 1.当前目录的 "/config"的子目录下 2.当前目录下 3.classpath根目录的"/config&qu ...

  8. 【LeetCode】14. Longest Common Prefix (2 solutions)

    Longest Common Prefix Write a function to find the longest common prefix string amongst an array of ...

  9. 可以尝试用Google Font API来摆脱网页字体的单调 仅仅抛砖引玉

    http://www.nowamagic.net/librarys/veda/detail/2513

  10. 你的Android不好用,都是因为这几点原因

    Android早已是全球最大.用户最多的移动操作系统,不过它离全球最好用还差得很远. 大家随手就能举出些曾经历过的糟心体验,如手机卡顿!电量不禁用!广告弹窗老是出现!不过很少有人会追根寻底的去问为何如 ...