CString 转换 Char* 最安全方法

CString转换char* 网上方法很多,但是,有些博客提供的方法简直就是滥竽充数!!!

比如:

cstring temp("http");

char * ptr=(LPSTR)(LPCTSTR)temp;

该方法将导致运行的时候弹出堆栈错误,编译器连调试的机会都不给你直接抛出异常,然后程序死亡!


最安全的方法只有这一种:

CString str=_T("hello kitty 12345 hello jackson");
int len=str.GetLength();

char *buffer=new char[len+1];
memset(buffer,0,len+1);

WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)str, -1,NULL, 0, NULL, FALSE);
WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)str, -1,(LPSTR)buffer, len, NULL, FALSE);

buffer[len]='\0';
可以进行封装,比如:

char* CRtfControle::CString2Char(CString txt)
{
	int len = txt.GetLength();
	char* ctXt = new char[len+1];
	memset(ctXt,0,len+1);
	WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)txt, -1,NULL, 0, NULL, FALSE);
	WideCharToMultiByte(CP_OEMCP, NULL, (LPCWSTR)txt, -1,(LPSTR)ctXt, len, NULL, FALSE);
	ctXt[len]='\0';
	return ctXt;
}


建议写博客的要有点鉴别能力,不要把错误的也抄下来!浪费大家时间!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值