今天在使用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. 算法笔记_187:历届试题 网络寻路(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任 ...

  2. 设定StatusBar的文字成不同的颜色

    设定StatusBar上的文字,该文字以StatusBar所在Form的字型设定为准,并以form的ForeColor为字的颜色,文字过长时,自动会截除这个程式的实质意义不太大,因为当文字被盖掉後需自 ...

  3. 〖Windows〗zigbee实验之cygwin编译tinyos.jar编译出错的解决方法

    1. 使用的cygwin安装包下载地址:cygwin-files.zip 2. 使用的一些rpm安装包的下载地址:cygwin_cc2430_rpms.zip 3. cygwin的默认安装目录是:C: ...

  4. KnockoutJS + My97DatePicker b

    如何将Knockoutjs和其他脚本库结合使用?这里给出一个Knockoutjs与my97datepicker配合使用的例子,例子中使用了ko的自定义绑定功能: ko.bindingHandlers. ...

  5. PHP-九个非常有用的功能[转]

    1. 函数的任意数目的参数你可能知道PHP允许你定义一个默认参数的函数.但你可能并不知道PHP还允许你定义一个完全任意的参数的函数下面是一个示例向你展示了默认参数的函数:// 两个默认参数的函数fun ...

  6. url-pattern配置

    <url-pattern>/a</url-pattern> <url-pattern>/ff.do</url-pattern> <url-patt ...

  7. 使用 Eclipse 远程调试 Java 应用程序

    Eclipse 中的远程调试特性 Eclipse 是一个图形化 Java 调试器前端.JDI 在 org.eclipse.jdt.debug 包中实现.本文不详细讨论 JDI 实现.参见 参考资料 获 ...

  8. HDUOJ---1879 继续畅通工程

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. MongoDB基本管理命令 [转]

    MongoDB基本管理命令 linux下配置安装mongodb 10分钟玩转mongoDB 官网安装教程 使用命令行方式连接mongodb: mongo /admin -u用户名 -p密码  --连接 ...

  10. 【Linux】X window与文本模式的切换

    Linux默认的情况下会提供六个Terminal来让使用者登陆,切换的方式为:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮.那这六个终端接口如何命名呢,系统会将[F1] ~ [F6] ...