转:http://blog.sina.com.cn/s/blog_58e19ae7010003jt.html

正确方法:
CString m_Head;
char *codefile;
codefile=(LPSTR)(LPCTSTR)m_Head;//正确,想办法去掉后缀
补充:
int fnlen = m_Head.GetLength() ; //strcspn(str,".");
codefile=new char[fnlen+4];
codefile=(LPSTR)(LPCTSTR)m_Head;//正确,想办法去掉后缀
for(int i=fnlen-1;i>3;i--)//去掉文件后缀.pas
{if((codefile[i]=='s')&&(codefile[i-1]=='a')&&(codefile[i-2] 
=='p')&&(codefile[i-3]=='.'))
{codefile[i]=codefile[i-1]=codefile[i-2]=codefile[i-3]=' ';
break;}
}
错误方法1:int fnlen = m_Head.GetLength() ; //strcspn(str,".");
codefile=new char[fnlen+4];
int i=0;//名字不正确,但是不为空。
for (; i<fnlen;i++)
codefile[i]=m_Head[i];
codefile[fnlen]=0;
错误方法2:
strcpy(codefile,m_Head.GetBuffer(fnlen)); //这句会让程序意外中止!
m_Head.ReleaseBuffer(fnlen);
错误方法3:
strcpy(codefile,m_Head);//这句也会让程序意外中止!
错误方法4:
codefile=m_Head.GetBuffer(fnlen);//可以执行,但codefile的值为空

参考资料:
CString转化为char? 
CString::GetAt 这个返回一个 char

如果是要char * 
可以用CString:Getbuffer 这个返回一个 char * 
其实还可以强制转化: 
LPCTSTR pch; 
CString str("123456"); 
pch = (LPCTSTR)str; 
上面的代码实际上就是先让系统执行了一次强制转化的结果,所以其实有点多此一举了…… 
但是这样做更安全一些,因为char *pBuffer = (LPSTR)(LPCTSTR)str;这样转换,只是让char指针指向了ctring的内存地址,如果对char进行了写操作的话,因为跨越了cstring的封装,有可能导致cstring对象的混乱,所以重新copy一个新的给char指针,可以做到更安全! 
如果只读不写,用char *pBuffer = (LPSTR)(LPCTSTR)str;就够了!

把CString转化为char*的更多相关文章

  1. MFC中CString转化为char*

    char* convertCStringToChars(CString string) { int nLength=string.GetLength(); ]; memset(c,,nLength+) ...

  2. mfc中CString转化为string的方法

    LL(1)分析法实验的mfc做到最后因为CString转化为string的问题卡了一个多小时,也是惨,网上各种方法找过都不行.幸亏最后还是找到几行代码搞定了.特此mark一下. USES_CONVER ...

  3. CString转换成char*

    CString转换成char* :charSource = (char*)strSource.GetBuffer(0); 法2:charSource = (char*)strSource.GetBuf ...

  4. 获取当前的时间,转化为char[]格式unix时间戳

    /* 在这个程序当中实现获取当前的unix时间戳 转化为char[] */ #include<stdio.h> #include<stdlib.h> #include<t ...

  5. CString 转换成 char *

    最近用到CString类,转换成 char * 类型,下面介绍用法: 一.CString 和 LPSTR 转换: CString转换成LPSTR: 方法一:CString server; LPSTR ...

  6. CString转换为const char*

    CString str=_T("这是我的测试程序.");// 先得到要转换为字符的长度const size_t strsize=(str.GetLength()+1)*2; // ...

  7. sprintf将CString转换成char[]

      在MFC中使用sprintf()函数将CString转换成char[]时,char[]只接受第一个字符 使用的是VS2008 CString name;dbName="test" ...

  8. 在Linux下使用sprintf代替atoi实现整型转化为char*

    程序中需要用到将整型转化为char*类型,然后将两个char*类型的变量拼接.将整型转化为char*自然想到了itoa函数: 头文件:#include <stdio.h> char *it ...

  9. 终于搞定在VS2010中将CString转换为const char*

    最近碰到了CString 转 const char *的问题. 以前只要简单的一个强制转换就OK了,可现在是不行了,搜索了很多资料,终于搞定,主要是Unicode和ANSI的问题,只要做一个转换就可以 ...

随机推荐

  1. windows下查看端口是否被占,以及端口被哪个程序占用

    如何查看端口被是否被占用 在 “ 命令提示符 ” 中输入 “netstat -an”, 即可显示本机所有开放端口.下表是具体的说明. 数据列 说明 propo 指连接使用的协议名称 local add ...

  2. New Concept English Two 17 43

    $课文41  你把那个叫帽子吗? 422. 'Do you call that a hat?' I said to my wife. “你把那个叫帽子吗?”我对妻子说. 423. 'You needn ...

  3. html5实现本页面元素拖放和本地文件拖放

    HTML5拖放 拖放本地数据   1.HTML拖放 拖放(Drag 和 Drop)是HTML5标准的组成部分 2.拖放开始: ondragStart:调用了一个函数,drag(event),它规定了被 ...

  4. promise的基础知识

    promise 相当于异步操作结果的占位符 它不会去订阅一个事件,也不会传递一个回调函数给目标函数,而是让函数返回一个promise,例如: let promise = readFile('a.txt ...

  5. scikit-learn 学习笔记-- Generalized Linear Models (二)

    Lasso regression 今天介绍另外一种带正则项的线性回归, ridge regression 的正则项是二范数,还有另外一种是一范数的,也就是lasso 回归,lasso 回归的正则项是系 ...

  6. 国内yum源的安装(163,阿里云,epel)

    ----阿里云镜像源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的 ...

  7. JS代码压缩格式化在线地址

    JS在线格式化: http://tool.oschina.net/codeformat/js JS在线压缩: http://dean.edwards.name/packer/

  8. 关于web api 中 日期格式问题解决方案

    在构造函数或者 全局开始的时候调用这个 public BossApiController() { JsonMediaTypeFormatter jsonFormatter = GlobalConfig ...

  9. 扩展Linq的Distinct方法动态根据条件进行筛选

    声明为了方便自己查看所以引用 原文地址:http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html Person1: Id=1, Nam ...

  10. charles 小米手机安装Charles证书

    1.手机Wi-Fi设置手动代理,添加IP和端口号 此处是:192.168.63.143:8888, 2.保存证书,PC端访问 chls.pro/ssl 下载pem证书,发送到手机 adb push c ...