看了无数帖子,试了n种方法,终于成功了!

正确方法:
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. VC2010不能将参数从“CString”转换为“const char *”

    原文地址:http://fengqing888.blog.163.com/blog/static/330114162012016103558408/ 你在vs2010中默认字符集是UNICODE字符集 ...

  2. CString转换成char*

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

  3. MFC中CString转换成char数组的问题

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

  4. CString,int,string,char*之间的转换(转)

    ............................................................... <C++标准函数库>中说的   有三个函数可以将字符串的内容 ...

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

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

  6. jcharArray转化为char [ ]

    jcharArray str 转化为char buf 先说下问题的来龙去脉: void JNICALL Java_com_interfaces_androidencode_YV12AddFont_YV ...

  7. 如何在C语言中把int*转化为char*

    初学指针我们可能会遇到如下代码: #include<stdio.h> int main() {int a = 0x11223344;int* pa = &a;char* pc = ...

  8. MFCC中CString, int, string, char之间的转换

    1.    CString  -->  char* (1)传给未分配内存的指针 CString cstr ="ASDDSD"; char *ch =cstr.GetBuffe ...

  9. CString,int,string,char*之间的转换

    <C++标准函数库>中说的   有三个函数可以将字符串的内容转换为字符数组和C-string   1.data(),返回没有"\0"的字符串数组   2,c_str() ...

最新文章

  1. Spring复习笔记:2
  2. JavaScript是如何工作的:与WebAssembly比较及其使用场景
  3. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
  4. java标识符遵循规范
  5. [javaSE] 数组(排序-冒泡排序)
  6. URLEncode编码和URLDecode解码
  7. python判断奇偶数字符串的拼接_Python字符串拼接方法总结
  8. pyecharts怎么绘制散点图_pyecharts可视化和wx的结合
  9. python中递归函数写法_python中递归函数如何创建
  10. 两本电子书 |Flink 最佳学习实践 | 从 0 到 1 学会 Apache Flink
  11. 测试m.2固态的软件,Ryzen新平台下M.2固态硬盘性能测试
  12. 为linux扩展swap分区
  13. Win系统 - Windows10 系统恢复语言栏位置的方法(二)
  14. commit 和 push 的临界点
  15. 《初等数论及其应用》第三章 素数和最大公因子
  16. 程序员的桌面是什么样的?美工:那...不是我的桌面吗?
  17. 本溪市公安局诉求电话
  18. 算法的评价标准:ROC,假阳性,mape
  19. C语言课设物资管理系统,C语言课设之物资管理系统.doc
  20. 前尘浮华一场梦 NOI2018 游记

热门文章

  1. 模块-from import导入所有工具
  2. jsonp java后台_jsonp与Java后端
  3. 侍魂胧月传说显示服务器未开启,侍魂胧月传说为什么进不去 侍魂胧月传说进不去的原因...
  4. python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...
  5. html5无意义标签,无意义的div和span标签
  6. screen常用命令以及screen恢复会话时出现There is no screen to be resumed matching
  7. Vue项目从无到有的部署上Github page
  8. expect工具使用
  9. 跟小静读CLR via C#(16)--泛型
  10. Wikioi 1081 线段树成段更新单点查询