转: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. BootStrap--scroll

    滚动侦测 滚动侦测基本使用方法为: <body data-spy="scroll"> <nav class="navbar navbar-default ...

  2. 流程设计器jQuery + svg/vml(Demo4 - 画连线)

    流程结点可以添加了之后,接下来到画结点与结点之间的连线,效果图如下 很眼馋visio的连线可以折来折去,这里实现的连线比较简单. 首先是把连线的类型分为Z(折线).N(折线)及I(直线)3种类型,然后 ...

  3. 集成学习之Boosting —— Gradient Boosting实现

    Gradient Boosting的一般算法流程 初始化: \(f_0(x) = \mathop{\arg\min}\limits_\gamma \sum\limits_{i=1}^N L(y_i, ...

  4. protel99 se中出现许多Backup of 文件,修改过保存时,总会出现备份文件,怎么才能取消这一设置?

    在file选项左边有个向下的大箭头标示 点开 有个prefereces项 点开之 把create backup项勾掉即可

  5. iframe相关知识

    iframe 不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的大小却不像层那样可以“伸缩自如”,所以带来了使用上的麻烦.一般通过百分比 ...

  6. 怎样创造財富?硅谷创业之父 Paul Graham 《黑客与画家》思维导图

    先送上亚马逊传送门:<黑客与画家>:硅谷创业之父 Paul Graham 文集 再送上一个思维导图: 下载大图:http://caifujianghu.com/article/ruhe-c ...

  7. cocostudio 使用教程

    项目配置 http://blog.csdn.net/chinahaerbin/article/details/21559351 项目配置如下: 还要引入命名空间之类的: #include " ...

  8. FastAdmin 环境变量 env 配置

    FastAdmin 环境变量 env 配置 目前 FastAdmin 支持环境变量 env 配置. 目前支持以下环境变量 app.debug app.trace database.type datab ...

  9. 【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

    原文网址:http://www.cnblogs.com/jostree/p/4137402.html 作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree ...

  10. 【转】纵表、横表互转的SQL

    纵表.横表互转的SQL 原文1:http://takkymj.iteye.com/blog/751401   横表就是普通的建表方式,如一个表结构为: 主键.字段1.字段2.字段3... 如果变成纵表 ...