此文从网上复制过来,原文出处已丢失,望见谅哈
      VC 2005中,这个本来很简单的问题又稍微复杂了一点。
    在工程里面,一个必不可少的步骤就是把CString转换为shar*字符串。通过google,我发现可以使用以下方法:
    使用CString的GetBuffer方法
        CString s("Hello,World");
        char* c = s.GetBuffer(0);
    但是我在VC++2005中编译得到下列信息
        error C2440: “初始化”: 无法从“wchar_t *”转换为“char *”
    对于这个错误不是很理解,对于wchar_t和char的区别不是很清楚,在MSDN中查看了一下,wchar_t是一个宽字符型,相当于unsigned short(16bit)。而我们通常使用的char是8bit。继续搜索wchar_t*到char*的转换,msdn上面有一篇文章是Convert Between Various String Types,讲了VC++2005中的各种字符串char *, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, and System.String的相互转换。其中将wchar_t*转换为char*的代码如下:(为了保持文章的一致性,修改了变量名)
        #include <stdlib.h>
        #include <iostream>
        using namespace std;
        int main()
        {
          wchar_t *s = L"Hello,World";
          wcout << s << endl;
 
          // Convert to a char*
          size_t s0 = wcslen(s) + 1;
          const size_t newsize = 100;
          size_t convertedChars = 0;
          char c[newsize];
          wcstombs_s(&convertedChars, c, s0, s , _TRUNCATE);
          cout << c << endl;
        }
   输出正确,均为Hello, World!
  
   至于为什么原来的那段代码别人都能用好,而我在VC++2005下面去不能直接使用,还要通过转换呢?正好看到《Programming Windows》的第二章讲Unicode的和在msdn论坛问了一下相关问题后得到答案。
   原来在VC++ 2005以前,应用程序默认都是关闭对Unicode的支持的,而在VC2005中,默认打开了对它的支持,CString对应的字符串应该是TCHAR,TCHAR的定义是这样的,
        #ifdef _UNICODE
        typedef wchar_t TCHAR ;
        #else
        typedef char TCHAR;
        #endif
我想这个就是为什么我在VC++2005种不能直接转换的原因。在工程中应该可以关闭对于Unicode的支持,从而可以直接转换。这个做法是右击工程名—〉Property—〉General中的character set中选择not set,这样,开头的那段代码就可以正确的执行了。这样就省下了一箩筐的问题。

CString向char类型转化 ---“=”: 无法从“wchar_t *”转换为“char *的更多相关文章

  1. Error:“const char*”类型的实参与“wchar_t”类型的形参不兼容

    MainApp\RPolarView.cpp(1571): error C2664: “ATL::CStringT<BaseType,StringTraits>::ReverseFind” ...

  2. vs2017中char* str = "1234asd56";会报错,——const char*类型的值不能用于初始化char*类型的实体

    原因: "1234asd56"是常量 ,正确的写法本身就是:const char* str = "1234asd56"; 之所以之前的vs版本可以写成char* ...

  3. "const char *" 类型的值不能用于初始化 "char *" 类型的实体

    用vs2019发现会出现这样的问题 最后发现只要设置一下就解决了,解决方案如下: 右击该项目,选择属性->c/c++->语言->将符合模式改为否就行了... 设置之后程序没有再报错, ...

  4. JAVA中的char类型

    1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a';  //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=1 ...

  5. C++中char类型的溢出问题

    C++中什么经常会运用到char类型,也会将char类型作为循环语句的循环条件,但往往这里最容易出现错误,容易出现溢出,进入死循环.这里我们就来简单介绍下为什么会出现这种情况. 首先,了解下char类 ...

  6. C++中“wchar_t* ”和“ char * ”之间的相互转换

    把char*转换为wchar_t* 用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert" ...

  7. 加深关于Java中char类型的理解

    1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a';  //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=1 ...

  8. char类型

    1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a';  //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=1 ...

  9. JAVA数据类型中的char类型

    1.JAVA中,char占2字节,16位.可在存放汉字 2.char赋值 char a='a'; //任意单个字符,加单引号. char a='中';//任意单个中文字,加单引号. char a=11 ...

随机推荐

  1. Cocos2d-JS特效

    Cocos2d-JS提供了很多特效,这些特效事实上属于间隔动作,特效类cc.GridAction类,也称为网格动作,它的类图如下图所示. 网格动作类图 网格动作cc.GridAction它有两个主要的 ...

  2. 2015年最新出炉的JavaScript开发框架

    前端框架简化了开发过程中,像 Bootstrap 和 Foundation 就是前端框架的佼佼者.在这篇文章了,我们编制了一组新鲜的,实用的,可以帮助您建立高质量的 Web 应用程序的 JavaScr ...

  3. 分享10 个超酷的 HTML5/CSS3 应用及源码

    1.HTML5视频破碎重组特效,强大视觉冲击 HTML5视频播放器很多,但是HTML5视频特效还是很少见的,这款HTML5视频破碎重组特效非常刺激,给人强大的视觉冲击.点击视频任意地方,HTML5将会 ...

  4. 分享10款激发灵感的最新HTML5/CSS3应用

    1.HTML5/CSS3实现iOS Path菜单 菜单动画很酷 Path菜单相信大家都不陌生吧,它在iOS中非常流行,今天我们要分享的菜单就是利用HTML5和CSS3技术来模拟实现这款iOS Path ...

  5. Android实现Http协议案例

    在Android开发中,使用Http协议实现网络之间的通信是随处可见的,使用http方式主要采用2中请求方式即get和post两种方式. 一.使用get方式: HttpGet httpGet = ne ...

  6. linux 线程函数大全

    Technorati 标签: Linux thread 索引: 1.创建线程pthread_create 2.等待线程结束pthread_join 3.分离线程pthread_detach 4.创建线 ...

  7. centos中安装chromium和flash

    安装环境:centos 6.5 64位 在centos中安装chromium 安装Google源 cd /etc/yum.repos.d/ sudo wget http://people.CentOS ...

  8. Vim一些实用的用法

    打开多个文件: 1.vim还没有启动的时候:在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件2.vim已经启动输入:open file可以再打开一个文件,并 ...

  9. Delphi XE5教程4:程序和单元概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...

  10. mercurial(hg)使用

    # 版本管理软件的比较 svn 每个目录下建一个.svn目录实在是不爽. git 分支管理非常方便,但没感觉有什么用,主要还是在修改前提交一次代码, 等后悔时再回来,没什么其他的目的.关键是中文乱码问 ...