C语⾔字符串前加L的意义如:L“A”
Unicode或者宽字符都没有改变char数据型态在C中的含义。char继续表⽰1个字节的储存空间,sizeof (char)继续返回1。理论上,C中1个字节可⽐8位长,但对我们⼤多数⼈来说,1个字节(也就是1个char)是8位宽。
C中的宽字符基于wchar_t数据型态,它在⼏个表头⽂件包括WCHAR.H中都有定义,像这样:
typedef unsigned short wchar_t ;
因此,wchar_t数据型态与⽆符号短整数型态相同,都是16位宽。
要定义包含⼀个宽字符的变量,可使⽤下⾯的语句:c语言定义一个字符串
wchar_t c = 'A' ;
变量c是⼀个双字节值0x0041,是Unicode表⽰的字母A。(然⽽,因为Intel微处理器从最⼩的字节开始储存多字节数值,该字节实际上是以0x41、0x00的顺序保存在内存中。如果检查Unicode⽂字的计算机储存应注意这⼀点。)
您还可定义指向宽字符串的指针:
wchar_t * p = L"Hello!" ;
注意紧接在第⼀个引号前⾯的⼤写字母L(代表「long」)。这将告诉编译器该字符串按宽字符保存-即每个字符占⽤2个字节。通常,指针变量p要占⽤4个字节,⽽字符串变量需要14个字节-每个字符需要2个字节,末尾的0还需要2个字节。
同样,您还可以⽤下⾯的语句定义宽字符数组:
static wchar_t a[] = L"Hello!" ;
该字符串也需要14个字节的储存空间,sizeof (a) 将返回14。索引数组a可得到单独的字符。a[1] 的值是宽字符「e」,或者0x0065。
虽然看上去更像⼀个印刷符号,但第⼀个引号前⾯的L⾮常重要,并且在两个符号之间必须没有空格。只有带有L,编译器才知道您需要将字符串存为每个字符2字节。稍后,当我们看到使⽤宽字符串⽽不是变量定义时,您还会遇到第⼀个引号前⾯的L。幸运的是,如果忘记了包含L,C编译器通常会给提出警告或错误信息。
您还可在单个字符⽂字前⾯使⽤L前缀,来表⽰它们应解释为宽字符。如下所⽰:
wchar_t c = L'A' ;
但通常这是不必要的,C编译器会对该字符进⾏扩充,使它成为宽字符。