在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?

今天在做 COS脚本解释器的时候,遇到了这个问题

先了解一下 LPCTCHAR 这个东东

LPCTSTR用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。

那么什么叫UNICODE(统一码)???

背景知识:    计算机发明后,为了在计算机中表示字符,人们制定了一种编码,叫ASCII码。ASCII码由一个字节中的7位(bit)表示,范围是0x00 - 0x7F 共128个字符。后来他们突然发现,如果需要按照表格方式打印这些字符的时候,缺少了“制表符”。于是又扩展了ASCII的定义,使用一个字节的全部8位(bit)来表示字符了,这就叫扩展ASCII码。范围是0x00 - 0xFF 共256个字符。中国人利用连续2扩展ASCII码的扩展区域(0xA0以后)来表示一个汉字,该方法的标准叫GB-2312。后来,日文、韩文、阿拉伯文、台湾繁体(BIG-5)......都使用类似的方法扩展了本地字符集的定义,现在统一称为 MBCS 字符集(多字节字符集)。这个方法是有缺陷的,因为各个国家地区定义的字符集有交集,因此使用GB-2312的软件,就不能在BIG-5的环境下运行(显示乱码),反之亦然。

为了把全世界人民所有的所有的文字符号都统一进行编码,于是制定了UNICODE标准字符集。UNICODE 使用2个字节表示一个字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。这下终于好啦,全世界任何一个地区的软件,可以不用修改地就能在另一个地区运行了。虽然我用 IE 浏览日本网站,显示出我不认识的日文文字,但至少不会是乱码了。UNICODE 的范围是 0x0000 - 0xFFFF 共6万多个字符,其中光汉字就占用了4万多个

1、LPCTSTR是什么?

LPCTSTR就是一个32-bit指针指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义

LPCTSTR是一个windows API数据类型。根据windows API数据类型的命名规律:

1)L——long 指针,是为了兼容Window3.1等16位扣件系统遗留下来的,

在Win32中以及其他的32的扣件系统中,long 指针和near 指针及far 修饰符都是为了兼容的作用,而没有实际意义。

2)P表示该变量是一个指针,C表示是常量(const),STR表示的是字符串。因此LPCSTR是一个const char*类型。

这是一个windows(ANSI)字符串常量,它是多字节编码的。
3)LPCWSTR:而W表示的是宽字符,因此LPCWSTR表示的也是字符串常量,不过是Unicode编码的。

2、问题的解决

1、用THCAR代替char

  2、字符串加_T(""),如_T("你好")  3、用_tcscpy等代替strcpy等

前俩种方法我都用了

其实我还是不太明白。为什么会出现这个问题呢??????

时间: 2024-08-10 11:43:19

在vs中char类型的实参与LPCWSTR类型的形参类型不兼容怎么解决?的相关文章

MFC中字符串赋值出现“Error:“const char*”类型的实参与“LPCWSTR”类型的形参不兼容”错误的解决方法

在编译MFC工程时,写下面代码出现了“Error:“const char*”类型的实参与“LPCWSTR”类型的形参不兼容”的错误. TextOut(hdc,0,0,"Mercedes",strlen("Mercedes")); 这是由于工程采用Unicode编码,这时“Mercedes”字符串类型为“wchar_t*”, 这时应该这样赋值: TextOut(hdc,0,0,_T("Mercedes"),strlen("Mercedes

Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 或者 "char*"类型的实参与"LPCWSTR"类型的形参不兼容

选择"XXX项目"->"属性"->"配置属性"->"常规"选项中,把"使用 Unicode 字符集"改为"使用多字节字符集",然后确定.如下图(VS2012):

Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 也许 "char*"类型的实参与"LPCWSTR"类型的形参不兼容

http://www.myexception.cn/ruby-rails/1876106.html 选择“XXX项目”->“属性”->“配置属性”->“常规”选项中,把“使用 Unicode 字符集”改为“使用多字节字符集”,然后确定.如下图(VS2012):

Error:"_TCHAR**"的实参与"char**"的形参不兼容

使用VS2010编写自己的第一个openGL代码遇到了这样的问题 #include "stdafx.h" #include "glut.h" int _tmain(int argc, _TCHAR* argv[]) { glutInit(&argc,argv);//Error:"_TCHAR**"的实参与"char**"的形参不兼容 return 0; } 在网上搜索了一些解决方法,自己总结如下: char是C语言标准

C#和C++中char类型的区别

对于char,这个字符类型.我们一般都认为就是一个字节.今天在仔细比较发现,C#的char和C++的char是有区别的. 1.首先来看C#中char占多大空间 using System;using System.Collections.Generic;using System.Text; namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {     

数据库中char与varchar类型的区别

在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,总结一下它们两者的区别,明确一下两者的区别. 1.char的长度是不可变的,而varchar的长度是可变的.也就是说,定义一个char[10]和varchar[10],如果存进去的是'abcd',那么char所占的长度依然为10,除了字符'abcd'外,后面跟六个空格,而varchar就立马把长度变为4了;取数据的时候,char类型的要用trim()去掉多余的空格,而v

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系.

.NET 中,编译器直接支持的数据类型称为基元类型(primitive type).基元类型和.NET框架类型(FCL)中的类型有直接的映射关系. The primitive types are Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, and Single. https://msdn.microsoft.com/zh-cn/library/s

SQL中char、varchar、nvarchar的区别

SQL中char.varchar.nvarchar的区别: char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.       varchar[(n)]      长度为

MySQL中char和varchar有啥区别?优缺点是啥?

在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定的长度,而varchar属于可变长的字符类型. char与varchar的区别 char (13)长度固定, 如'www.jb51.net' 存储需要空间 12个字符: varchar(13) 可变长 如'www.jb51.net' 需要存储空间 13字符:从上面可以看得出来char 长度是固定的,不管你存储的数据是多少他都会都固定的长度.而varchar则处可变长度但他要在总长