关于WCHAR转化为char的有关问题

关于WCHAR转化为char的问题
#include "stdafx.h"
#include <atlbase.h>
char* WSTRToAnsi(WCHAR* Msg)//把wchar*转换称char*
{
int len = wcstombs(NULL, Msg, 0);
char* buf = new char[len+1];
wcstombs(buf, Msg, len);
buf[len] = 0;
return buf;
}
int main(int argc, char* argv[])
{
WCHAR* d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败
char* s =WSTRToAnsi(d);
printf("%s\n",s);//?
return 0;
}

------解决方案--------------------
WCHAR* d=L "速度 ";
——对于这句话的处理,不同的编译器可能会不一样。
大部分编译器中,如果你的源文件不是Unicode格式的,那么d所指向的字符串并不会被自动转换成Unicode格式。
------解决方案--------------------
C/C++ code

//#include   "stdafx.h " 
#include   "tchar.h"
//#include <iostream.h>
#include <LOCALE.h>
#include   <atlbase.h> 

//using namespace std;

char*   WSTRToAnsi(WCHAR*   Msg)//把wchar*转换称char* 
{ 
    int   len   =   wcstombs(NULL,   Msg,   0); 
    char*   buf   =   new   char[len+1]; 
    wcstombs(buf,   Msg,   len); 
    buf[len]   =   0; 
    return   buf; 
} 
int   main() 
{ 
    WCHAR*   d=L"速度";//此处如果是英文,可以成功,如果是汉字,则失败 
    
//    cout.imbue(locale("chs"));///这样写可以
    setlocale(LC_ALL,"chs");///////////////////////本地化
    char*   s   =WSTRToAnsi(d); 
    printf( "%s\n ",s);//? 
    
    return   0; 
}

------解决方案--------------------

要保證源文件是 Unicode 的——不是每一個編譯器都支持的。