C语言中宽字符/宽字符串的输入输出(wchar_t和wprintf)

char在C/C++中只占一个字节,通常只用来处理ASCII码,所以不能用来存放汉字等象形文字。通常我们使用Unicode字符集(万国码),支持全球的语言文化。utf-16足以存放全球常用的字符,所以在微软的编译器中,使用2个字节来存储字符,而在其他编译器中,比如GCC和LLVM/Clang采用utf-32来存放字符,占4个字节。使用两个字节存储的另外一个好处是可以节省内存,而使用四个字节会浪费 50% 以上的内存。
处理方法: C语言中使用了一个新的类型,叫做wchar_t,w 是 wide 的首字母,t 是 type 的首字符,wchar_t 的意思就是宽字符类型。wchar_t的长度由编译器决定,就是上面说到的那样,微软编译器下是2个字节,等价于unsigned short,其他编译器是4个字节,相当于unsigned int 。wchar_t位于wchar.h头文件中
wchar_t 其实是用 typedef 关键字定义的一个别名。

wchar_t a = L'A';  //英文字符(基本拉丁字符)
wchar_t b = L'9';  //英文数字(阿拉伯数字)
wchar_t c = L'中';  //中文汉字

宽字符的输出

putchar和printf都只能输出不加L的窄字符,输出宽字符串可以使用 头文件中的 putwchar 和 wprintf 函数,wprintf 对应的格式控制符是%lc。
在输出宽字符之前还要使用 setlocale 函数进行本地化设置,setlocale 函数位于 头文件中,初始化语句为

setlocale(LC_ALL, "zh-CN");//将本地环境设置为简体中文。
putchar(a);
wprintf(L"%lc",b);

字符串

给字符串前面加上L就变成了宽字符串,输出使用wprintf 函数,对于的格式控制为%ls 。

wchar_t a[] = L"我爱中国";
wchar_t *b= L"我爱中国";
setlocale(LC_ALL, "zh-CN");
wprintf(L"%s %s",a,b);

最后说明一下,源代码是使用utf-8来编码的,并不是ASCII码。

你可能感兴趣的:(C++心得笔记,c语言,c++,字符串)