关于MFC中CString转为char *的问题

网上百度了一番,关于CString转为char *,众说纷纭,我用的VS2015,能编译过去的只有下面一种写法:

CString str = "ABCDEF"; 
char *pBuf = (char *)str.GetBuffer(0); 

但是我按上面的方法只能得到首个字节,即输出pBuf只能得到A(不知道为什么,难道是因为我没刷新缓冲区?)

后来手动遍历了一下CString,改成了这样:

CString str = "ABCDEF";
char s[10];
int len = str.GetLength();
for(int i = 0; i < len; i++) {
    s[i] = str.getAt(i);
} s[len] = '\0';

这样的话全英文字符可以,但是中文会丢失信息。各位大佬给指点一下。。

阅读 6.2k
2 个回答

已解决:

CString str = _T("D://校内项目//QQ.bmp");
//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
int n =str.GetLength();    // n = 14, len = 18

//获取宽字节字符的大小,大小是按字节计算的
intlen =WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);

//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
char * pFileName = newchar[len+1];  //以字节为单位

//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP,0,str,str.GetLength() + 1 ,pFileName,len+ 1 ,NULL,NULL);
pFileName[len+1]= '/0';

参考自 http://blog.csdn.net/linrulei...

应该是unicode的问题,中文字符一个字一般是4个字节。而且用char*保存中文字符不是很好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题