为什么输出a?//要如何改

为什么输出a????//要怎么改?

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
TCHAR buf[8] = L"abcdef";
char buf2[8*2];
memcpy(buf2,buf,8*2); 
printf("%s\n",buf2);
return 0;
}



------解决方案--------------------
把printf的%s改为%ws
------解决方案--------------------
 memcpy(buf2,buf,8*2); 
    printf("%s\n",buf2); 你在这里下个断点就知道了, 
你会看到buf2指向的内存中是这样的: 'a' 0 'b' 0 'c' 0 'd' 0 'e' 0 'f' 0 0 0 0 0
所以你输出 buf2时, 只输出一个a后, 就遇到结束符了, 所以只能看到输出一个a.

原因在于: 你的环境是UNICODE的, TCHAR 被解释成 wchar_t 也是就需要两个字节表示一个字符. 所以'a'实际是0x0061.

所以你直接复制内存, 想这样简单的把UNICODE转换成ASCII是不行的.