我用VS2008用的是宽字节模式,但是MYSQl用的是多字节的,
下面是我写的 Unicode 转 char 但是这个new出来的内存到底怎么释放?
有点不明白!
const char* CDlog::UnicodetoChar(const TCHAR* src)
{
if (NULL == src)
{
return NULL;
}
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,src,-1,NULL,0,NULL,FALSE);
m_pCharBuf = new char[dwNum];
memset(m_pCharBuf, 0 ,sizeof(char) * (dwNum +1));
WideCharToMultiByte(CP_OEMCP,NULL,src,-1,m_pCharBuf,dwNum,NULL,FALSE);
return m_pCharBuf;
}
下面是我写的 Unicode 转 char 但是这个new出来的内存到底怎么释放?
有点不明白!
const char* CDlog::UnicodetoChar(const TCHAR* src)
{
if (NULL == src)
{
return NULL;
}
DWORD dwNum = WideCharToMultiByte(CP_OEMCP,NULL,src,-1,NULL,0,NULL,FALSE);
m_pCharBuf = new char[dwNum];
memset(m_pCharBuf, 0 ,sizeof(char) * (dwNum +1));
WideCharToMultiByte(CP_OEMCP,NULL,src,-1,m_pCharBuf,dwNum,NULL,FALSE);
return m_pCharBuf;
}
解决方案 »
- [紧急求助]VS2005操作数据库的问题
- 急!急!急!急!mscomm无法接收空字符
- 谢谢。对于高手非常简单的问题,但对于我这个菜鸟却一天都没有搞定的问题
- 如何在超级终端中通过给Modem发送at指令来拨号上网
- 为什么视图不能响应菜单命令(在线等)
- 代理的问题
- 直接Include<string>怎么使用?
- 我想补C++基础应该看什么书?
- 倾家荡产贴
- 如何求解文本框高度 (这个问题是Vb的问题,但是在Vb组中没有人回答,由于要用到Api,所以到Vc组来看看,希望高手们帮忙阿)
- 使用OpenSSL如何进行BASE64编解码?
- toolbar添加combox按钮代码//代码中找到那个按钮什么意思,原来就有按钮还添加什么呀???
该做法我认为2问题:
1.编译条件改为MultiByte时,tchar-》char与名字有冲突【歧义】,永远是宽字节编译除外
2.返回的堆,释放责任后移给客户,容易出错。
我的做法是样的,写一个类似CString的类,返回cstring对象; 可以用std::wstring,这样不用考虑释放问题【效率要考虑】
改这样
const FALSE CDlog::UnicodetoChar(__in const LPWSTR UnicodeChar, __out LPSTR AnsiChar, __in int nSize)
SELECT CONVERT(CAST(UnicodeChar AS BINARY) USING 'gbk') FROM table
这个是查询的,比如说mysql_real_connect 连接都是 const char* 类型 看来还是要把C++的好好看下
char user[] = "root";
char pwd[] = "root";
char table[] = "test";mysql_real_connect(mysql, host, user,pwd, table, 3306, NULL, NULL);
你直接定义char不行吗,
为什么一定要用TCHAR呢.