由于结构体中用到联合体(联合体需要确定分配内存分配大小)或其它因素,需要用char数组来保存字符串,但是在MFC中一般都是用CString来存放字条串。关于它们之间的转换,在VS2008中有时会出现异常情况。在MSDN是这样写的:

CString orig("Hello, World!");

// Convert to a char*
    const size_t newsize = 100;
    char nstring[newsize];
    strcpy_s(nstring, orig);

但在实际应用中,并不能通过,总会在strcpy_s()函数中出错,或者在nstring的后面跟着很多乱码尾巴。在网上查阅了一些方法。如下:

方法一:
char *p;
CString str="hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
方法二:
CString str="hello";
char ch[20];
memcpy(ch,str,str.GetLength());
方法三:
char *ch;
CString str="hello";
ch=(LPSTR)(LPCTSTR)str;

但总达不到期望的结果。随后再在网上查,发现是Unicode字符集的问题。选择项目->项目属性(或直接按alt+F7)->配置属性,在右边找到“字符集”,将“使用Unicode字符集”改为“使用多字节字符集”。保存之后需要重新生成解决方案。这样上面的方法都可以通过并实现,但是在方法二中,最好不要使用memcpy,直接用strcpy_s(char*, CString)就可以了,因为用memcpy也会出现乱码尾巴。

如果不想改变Unicode字符集,网上也有介绍方法,但我没有试过,在此列出来供网友们参考:

CString strPath = L"adfafs主声音文件fsfsa";
int nLength = strPath.GetLength();
int nBytes = WideCharToMultiByte(CP_ACP,0,strPath,nLength,NULL,0,NULL,NULL);
char* VoicePath = new char[ nBytes + 1];
memset(VoicePath,0,nLength + 1);
WideCharToMultiByte(CP_OEMCP, 0, strPath, nLength, VoicePath, nBytes, NULL, NULL);
VoicePath[nBytes] = 0;

MFC中CString转换成char数组的问题相关推荐

  1. CString转换成char*

    CString转换成char* CString strSource;//宣告CString char* charSource; //宣告char* 法1: charSource = (char*)st ...

  2. MFC中CString,int,string,char * ,char[] 之间互转

    <1> (1)string 转 CString  CString.format("%s", string.c_str());   (2)char 转 CStri ...

  3. 将字符串中大写转换成小写,小写转换成大写。基础题目

    大小写转换 String url="asdfaDFSFDSoiuonmlWERVuojln" 将以上字符串大写转换成小写,小写转换成大写. 首先转换成char 数组char[] s ...

  4. VC2008中将CString转换成const char*的一种有效方法

    文章转载自http://blog.csdn.net/lanbing510/article/details/7425613 在Visual Studio 200X下,CString直接转换成const ...

  5. MFC中CString.format用法

    MFC中CString.Format的详细用法 收藏  在MFC程序中,使用CString来处理字符串是一个很不错的选择. CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的 ...

  6. MFC中强制转换总结

    由于类型转换经常出问题这里收集了一些常见的问题,下面是强制类型转换的科普: C++中的类型转换分为两种: 1.隐式类型转换: 2.显式类型转换. 而对于隐式变换,就是标准的转换,在很多时候,不经意间就 ...

  7. HDOJ---1431 素数回文[素数筛选+ltoa函数(将长整形转换成字符数组)+打表]

    素数回文 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. java怎么把字符串转换成字符数组

    此博客用于个人编程学习记录. 文章内容来自于: java怎么把字符串转换成字符数组-Java基础-PHP中文网https://www.php.cn/java/base/435415.html java ...

  9. C语言实现邻接矩阵转换成边集数组,克鲁斯卡尔(Kruskal)算法,并对其优化

    将边从小到大顺序排列,从最小边的开始,逐一将边加入最小生成树中,但有一个问题是要判断加入边后,是否会产生回路.解决方法:通过访问边的起点和终点是否在同一个集合来判断该边加入生成树后是否会形成环路. 克 ...

最新文章

  1. 什么样的技术将在后大流行的世界里兴起
  2. Java 常用设计模式 -- Builder模式
  3. 修改数据库中group_concat的返回结果的长度限制
  4. django中如何优雅的处理一个多按钮的表单
  5. hdu1824 基础2sat
  6. 并发基础篇(六):线程Thread类的start()方法和run()方法
  7. 烂泥:【解决】word复制windows live writer没有图片
  8. Linux什么时候在pc机上有一席之地
  9. geojson地图_Geojson地图pandas数据帧
  10. java 顺序存储键值对_java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)...
  11. inux下切换到root权限有以下几种方式
  12. 计算机电源高频干扰,在高频开关电源设计中怎样抑制电磁干扰?
  13. 双硬盘双win10互不干扰_win10系统安装双硬盘却无法显示另一个硬盘的修复方案...
  14. STM32工程文件的建立以及Keil软件的基本设置和修改
  15. 6种css3鼠标滑过动画效果
  16. Revit二次开发入门捷径_升维学习、降维打击
  17. 最通俗易懂的nginx
  18. Problem - 1335E2 - Codeforces(暴力+优化)
  19. 2. TortoiseGit安装与配置
  20. Unity UGUI图文混排源码(二)

热门文章

  1. python连接sqlite数据库的代码_Python3实现连接SQLite数据库的方法
  2. Mooc的Python3学习笔记
  3. Qt eventFilter实现信号与槽
  4. 【剑指offer】_10二叉树和为某一路径值
  5. extern和static的区别
  6. VirtualBox Ubuntu个人配置
  7. 第3章 文件IO | 001 文件描述符
  8. gcc编译多个源代码文件的过程(引出makefile)
  9. Java面试题目,java关键字final
  10. 对于‘敲什么都队’自主开发的《校园服务》软件的使用体验