CString origCString("Hello,World");
char* CharString = origCString.GetBuffer(origCString.GetLength()+1);
在VC++2008中编译得到下列信息:
Error 1 error C2440: 'initializing' : cannot convert from 'wchar_t *' to 'char *'
又是该死的Unicode作怪。一查看,果然如此,vc++2008默认打开了对unicode的支持……,
CString对应的字符串应该是TCHAR,TCHAR的定义是这样的,
#ifdef _UNICODE
typedef wchar_t TCHAR ;
#else
typedef char TCHAR;
#endif
查阅MSDN,发现一篇好文章:“How to: Convert Between Various String Types”,http://msdn2.microsoft.com/en-us/library/ms235631.aspx。
其中将wchar_t*转换为char*的代码如下:(为了保持文章的一致性,修改了变量名)
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
wchar_t *origString = L"Hello,World";
wcout << origString << endl;
// Convert to a char*
size_t origsize = wcslen(origString) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
char CharString[newsize];
wcstombs_s(&convertedChars, CharString, origsize, origString , _TRUNCATE);
cout << CharString << endl;
}
输出正确,均为Hello, World!
结合上面的两段,看看能不能将CString转换为char*
CString origCString("Hello, World!");
wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1);
size_t origsize = wcslen(wCharString) + 1;
size_t convertedChars = 0;
char *CharString;
CharString=new char(origsize);
wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE);
cout << CharString << endl;
成功输出字符串"Hello,World" 。
真是太麻烦了,还是将unicode支持关闭吧。工程名—〉属性—〉常规中的 字符集 中选择 未设置。