char和wchar_t打印中文的有关问题

char和wchar_t打印中文的问题
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(void)
{
char *aa;
char *bb = "发达";
wchar_t *cc = L"放掉";
aa = setlocale(LC_ALL,"C");
printf("1111111\n");
printf("%s\n",aa);
printf("%s\n",bb);
printf("%ls\n",cc);
aa = setlocale(LC_ALL,"zh_CN.UTF-8");
printf("2222222\n");
printf("%s\n",aa);
printf("%s\n",bb);
printf("%ls\n",cc);
printf("3333333\n");
aa = setlocale(LC_ALL,"en_US.UTF-8");
printf("%s\n",aa);
printf("%s\n",bb);
printf("%ls\n",cc);
return 0;
}

输出为:
1111111
C
发达
2222222
zh_CN.UTF-8
发达
放掉
3333333
en_US.UTF-8
发达
放掉

也就是对于char类型,不管字符集环境是C还是zh_CN.UTF-8或en_US.UTF-8都能打印出来;而对于wchar_t在字符集环境是C的情况下打印不出来,请问这是为什么?

------解决方案--------------------
你的程序与平台有关的,且与源文件编码有关(不知你用什么平台,源文件是什么编码)
我的结果与你不同,如果是OEM编码(win7+vs2008)
1111111
C
发达
2222222
(null)
发达
3333333
(null)
发达
而XP+VC6的
1111111
C
发达

2222222
(null)
发达

3333333
(null)
发达
在cygwin的gcc上,OEM源码上面的程序无法编译wchar_t *cc = L"放掉";出错
如果源码改成UTF8,结果会是以下:
win7+vs2008
1111111
C
鍙戣揪
2222222
(null)
鍙戣揪
3333333
(null)
鍙戣揪
winxp+vc6
1111111
C
鍙戣揪

2222222
(null)
鍙戣揪

3333333
(null)
鍙戣揪
cygwin+gcc
1111111
C
发达
2222222
zh_CN.UTF-8
发达
放掉
3333333
en_US.UTF-8
发达
放掉
-------------------------------
所以,你的程序与平台及编译器有关,只能按测试来输出你要的(要解释的话,单步跟踪下看内码的变化)