MFC中CString转成char *

转换之前,首先了解几点:

  1. 工程的编码属性不同,CString的存储方式也不一样。
    a) 比如unicode字符集时,CString会被定义成CStringW,其内部是wchar宽字符。每个英文字母也会占用2个字节,如果不转换直接输出则只能输出第一个字符(第二个字符为0被截断了)。
    b) 多字节时,CString被定义为CStringA,其内部是char单字节字符。

  2. CString有一个GetBuffer()函数,可以获取指向字符缓冲区的非常量指针。并且会锁定缓冲区长度。如果程序后面还要操作这个CString,且会修改长度。则一定记得要调用ReleaseBuffer()解除锁定。如果只是读取,则不用。当GetBuffer()有参数时,如果输入值小于缓冲区长度,则返回的指针跟前面说的一样。如果大于当前长度,则系统会重新realloc一份大的空间,覆盖原来的位置,实现动态增长。

  3. 一些常用的代号。
    char - A
    tchar - T
    bstr - OLE
    wchar - w
    const - C

  4. mfc自带的一些宏定义转换。比如CT2A表示从tchar转到char。CW2A表示从宽字符转为单字符。后续发展时,我们只需使用CT2A即可,它兼容包括了w。

下面开始介绍CString转为char *的几种方法,以unicode工程属性为例:

  1. 用%S进行宽字符输出或者格式化。
  char FileName[256] = {0};
  CString strText = _T("abc.txt");
  _snprintf_s(FileName, 256, "log/%S", strText.GetBuffer());
  1. 用一个中间变量进行过渡。
  char FileName[256] = {0};
  CString strText = _T("abc.txt");
  char tmp_str[100] = { 0 };
  strcpy_s(tmp_str, CT2A(strText.GetBuffer()) );
  _snprintf_s(FileName, 256, "log/%s", tmp_str);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值