如何将CString转换为const char *类型?


尝试过的代码:
1.//这段代码会出现警告:
//warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
        
         CString strBuffer="abc";
         char charBuffer[200]; 
for(i=0;i<strBuffer.GetLength();i++)
{
*(charBuffer+i)=strBuffer.GetAt(i);
strcat(charBuffer,strBuffer.GetAt(i));
}
*(charBuffer+i)='\0';
2://这段代码出现错误,不能把CString类型转换为const char *
    charBuffer = (LPSTR)(LPCTSTR)strBuffer;

4 个解决方案

#1


int CCStdioFileDlg::UCS2ASC(wchar_t* pUCS,char *pASC)
{
int len = 0;

if(pUCS == NULL || pASC == NULL)
return -1;

len = WideCharToMultiByte(CP_ACP,0,pUCS,-1,NULL,0,NULL,NULL);
WideCharToMultiByte(CP_ACP,0,pUCS,-1,pASC,len,NULL,NULL);
len--;
return len;
}

void CCStdioFileDlg::OnBtwrite() 
{
// TODO: Add your control notification handler code here
FILE *hFile;
char aTxt[256];
CString szTxt = _T("Hello world from fputs.\n");
hFile = fopen("test.txt" , "w");
    UCS2ASC(szTxt.GetBuffer(szTxt.GetLength()) , aTxt);
szTxt.ReleaseBuffer();
fputs( aTxt , hFile );
fclose(hFile);
}

#2


用WideCharToMultiByte就行

#3


如果有汉字的话不要转换成char*,最好转换成tchar*
CString 自己有个方法:LockBuffer()、GetBuffer()、ReleaseBuffer()可以直接把cstring当作TCHAR *使用,详细资料你可以查询一下msdn

第一个警告的原因是你没有进行强制类型转换,getAt得到的是TCHAR类型,不是char类型
第二个也是这个原因。你第一个的思路是正确的。

#4


1.//这段代码会出现警告:
//warning C4244: '=' : conversion from 'unsigned short' to 'char', possible loss of data
        
         CString strBuffer="abc";
         char charBuffer[200]; 
for(i=0;i<strBuffer.GetLength();i++)
{
*(charBuffer+i)=(char)strBuffer.GetAt(i); //强制转换
strcat(charBuffer,strBuffer.GetAt(i));
//出错,是因为你把一个TCHAR 的类型当成char*了。当然出错。从你程序的租用来看你跟本不用加这句
}
*(charBuffer+i)='\0';
2://这段代码出现错误,不能把CString类型转换为const char *
    charBuffer = (LPSTR)(LPCTSTR)strBuffer;

楼住要好好看看类型了
关注微信公众号

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com