|
t __cdecl strlen (const char *) ;
而wcslen函式则说明如下:
size_t __cdecl wcslen (const wchar_t *) ;
这时我们知道,要得到宽字串的长度可以呼叫
iLength = wcslen (pw) ;
函式将返回字串中的字元数6。请记住,改成宽位元组後,字串的字元长度不改变,只是位元组长度改变了。
您熟悉的所有带有字串参数的C执行时期程式库函式都有宽字元版。例如,wprintf是printf的宽字元版。这些函式在WCHAR.H和含有标准函式说明的表头档案中说明。
维护单一原始码
当然,使用Unicode也有缺点。第一点也是最主要的一点是,程式中的每个字串都将占用两倍的储存空间。此外,您将发现宽字元执行时期程式库中的函式比常规的函式大。出於这个原因,您也许想建立两个版本的程式-一个处理ASCII字串,另一个处理Unicode字串。最好的解决办法是维护既能按ASCII编译又能按Unicode编译的单一原始码档案。
虽然只是一小段程式,但由於执行时期程式库函式有不同的名称,您也要定义不同的字元,这将在处理前面有L的字串文字时遇到麻烦。
一个办法是使用Microsoft Visual C++(www.cppentry.com)包含的TCHAR.H表头档案。该表头档案不是ANSI
C标准的一部分,因此那里定义的每个函式和巨集定义的前面都有一条底线。TCHAR.H为需要字串参数的标准执行时期程式库函式提供了一系列的替代名称(例如,_tprintf和_tcslen)。有时这些名称也称为「通用」函式名称,因为它们既可以指向函式的Unicode版也可以指向非Unicode版。
如果定义了名为_UNICODE的识别字,并且程式中包含了TCHAR.H表头档案,那么_tcslen就定义为wcslen:
#define _tcslen wcslen
如果没有定义UNICODE,则_tcslen定义为strlen:
#define _tcslen strlen
等等。TCHAR.H还用一个新的资料型态TCHAR来解决两种字元资料型态的问题。如果定义了
_UNICODE识别字,那么TCHAR就是wchar_t:
typedef wchar_t TCHAR ;
否则,TCHAR就是char:
typedef char TCHAR ;
现在开始讨论字串文字中的L问题。如果定义了 |