把CString转化为char*

转: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;就够了!

时间: 2024-10-31 12:09:34

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

MFC中CString转化为char*

char* convertCStringToChars(CString string) { int nLength=string.GetLength(); char *c=new char[nLength+1]; memset(c,0,nLength+1); WideCharToMultiByte(CP_ACP,0,string,nLength,c,nLength,NULL,NULL); return c; }

mfc中CString转化为string的方法

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

Java判断回文语句的程序(可变参数,String转化为char数组)

static void Huiwen(char... cs){     //char... cs  支持可变参数格式为 //(类型名... 变量名)--形参列表,相当于建立了一个长度可变的动态数组,系统根据用户需求来确定数组的长度 int b_ool=1; for(int i=0;i<cs.length/2;i++)    //length为这个可变数组的长度,注意此时长度为数组下表加1,通过cs.length-i-1可知 if(cs[i]!=cs[cs.length-i-1   // 判断 ]

递归实现int转化为char字符串

本文出自:http://blog.csdn.net/svitter 实验环境:Myeclipse10 + tomcat7.0 有时间会写windows和linux下的tomcat配置,现在时间有限,暂且不写了..有些东西也是没有理解透彻. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <%@ page language="java" contentType="

MFC中cstring,string和char[]的相互转化

int 转 CString:CString.Format("%d",int);...............................string 转 CString CString.format("%s", string.c_str()); 用c_str()确实比data()要好. .......................................char* 转 CString CString.format("%s", cha

类型转换 - CString,int,string,char*之间的转换

<C++标准函数库>中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy() ................................................................. int 转 CString: CString.Format("%d",int); ..............................

数组转化为char * 的问题

比如 将vector<float >  pcaf; 转化为 char *data ; 1 Vector<float> pcaf; 2 for(int i=0;i<15;i++) 3 { 4 pcaf.push_back(i*4); 5 } 6 char * data; 7 data=new char[pcaf.size()*sizeof(float)]; 8 float *pf = (float *)data; 9 for (int i = 0; i < pcaf.si

CString 转换成 char *

写程序时 要实现CString转换成 char *,晚上找了一些方法,可总是会有错误,不是我想要的. 比如下面这两种转换格式: 1. <span style="white-space:pre"> </span>CString strItem("1238djj"); char *chItem1; chItem1 = (LPSTR)(LPCTSTR)strItem1; 2. <span style="white-space:pre

CString,int,String,char,BSTR之间的转换

String 转 CString CString.format("%s", string.c_str()); char 转 CString CString.format("%s", char*); char 转 string string s(char *); string 转 char * char *p = string.c_str(); CString 转 string string s(CString.GetBuffer()); 1. String ->