使用Unicode字符集出现的错误总结

8 篇文章 0 订阅
1 篇文章 0 订阅

在使用Visual Stdio 较高的版本进行C/C++编程的时候,会涉及到字符集选择的问题,一般软件默认的是使用Unicode字符集,因为无论是从代码的通用性,还是程序的运行效率上讲Unicode字符集都比多字节字符集要强得多。但是由于现在的编程教材和“流传的代码”中都是基于多字节字符集来编码的。这就造成了直接改变工程属性中的字符集时,出现大量的错误。现在将我本人遇到的一些错误总结一下。


我觉得编写程序是一门艺术,一个程序、一个工程不但要能够完成所预期的功能(这是必须的),还要追求美,就好比一幅画、一首歌。表达其本意外,还要能够给人以美得享受,使人有所体会、有所提升。对于程序而言,其简洁、健壮、巧妙无一不能使人(起码能令我)有所思、有所悟。


1、某类型的实参与某某类型的形参不兼容

如"const char " 类型的实参与 “HWND” 类型的形参不兼容 ** ** 函数调用中的参数太少*
程序语句为:
MessageBoxA("绑定失败!");
解决方法:改成:
MessageBox(L"绑定失败!");
或者
MessageBoxW(L"绑定失败!");

2、定义变量时出现:不存在从 “某类型” 转换到 “某某类型” 的适当构造函数

语句为:
CString str = (char*)lParam;
解决方法:改成:
CString str((char*)lParam);

3、引用时出现:不存在从 “某类型” 到 “某某类型” 的适当转换函数

**如:不存在从 “CString” 到 “const char *” 的适当转换函数 **
语句为:
sendto(m_socket, strSend, strSend.GetLength() + 1, 0, (SOCKADDR*)&addrTo, sizeof(SOCKADDR));
这个问题我暂时的就解决方法是先将CString转成string,然后再转换成const char。
解决方法:使用如下函数

void HCString2String(CString &cstr, string &str)
{
	CStringA cstra;
	cstra = cstr.GetBuffer(0);
	str = cstra.GetBuffer(0);
	cstr.ReleaseBuffer(0);
}

然后以上语句改为:

	HCString2String(strSend, strSendC);
	sendto(m_socket,strSendC.c_str(),strlen(strSendC.c_str()) + 1,0,
	 (SOCKADDR*)&addrTo,sizeof(SOCKADDR));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值