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

norains 2005-09-27 09:37:32
尝试过的代码:
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;
...全文
478 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
samp_miao 2005-10-17
  • 打赏
  • 举报
回复
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;

楼住要好好看看类型了
LabAdmin 2005-10-16
  • 打赏
  • 举报
回复
如果有汉字的话不要转换成char*,最好转换成tchar*
CString 自己有个方法:LockBuffer()、GetBuffer()、ReleaseBuffer()可以直接把cstring当作TCHAR *使用,详细资料你可以查询一下msdn

第一个警告的原因是你没有进行强制类型转换,getAt得到的是TCHAR类型,不是char类型
第二个也是这个原因。你第一个的思路是正确的。
milozy1983 2005-09-27
  • 打赏
  • 举报
回复
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);
}
西山小月 2005-09-27
  • 打赏
  • 举报
回复
用WideCharToMultiByte就行

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧