有两个字符串函数,即l s t r c m p和l s t r c m p i,它们的行为特性与等价的C运行期函数是不同的。
C运行期函数s t r c m p、s t r c m p i、w c s c m p和w c s c m p i只是对字符串中的代码点的值进行比较,这
就是说,这些函数将忽略实际字符的含义,只是将第一个字符串中的每个字符的数值与第二个
字符串中的字符的数值进行比较。而Wi n d o w s函数l s t r c m p和l s t r c m p i是作为对Wi n d o w s函数
C o m p a r e S t r i n g的调用来实现的。
该函数对两个U n i c o d e字符串进行比较。C o m p a r e S t r i n g的第一个参数用于设定语言I D
(L C I D),这是个3 2位值,用于标识一种特定的语言。C o m p a r e S t r i n g使用这个L C I D来比较这两
个字符串,方法是对照一种特定的语言来查看它们的字符的含义。这种操作方法比C运行期函
数简单地进行数值比较更有意义。
当l s t r c m p函数系列中的任何一个函数调用C o m p a r e S t r i n g时,该函数便将调用Wi n d o w s的
G e t T h r e a d S t r i n g函数的结果作为第一个参数来传递:
每次创建一个线程时,它就被赋予一种语言。函数将返回该线程的当前语言设置。
C o m p a r e S t r i n g的第二个参数用于标识一些标志,这些标志用来修改该函数比较两个字符
串时所用的方法。表2 - 5显示了可以使用的标志。
表2-5 Compare String 的标志及含义
标志含义
N O R M I G N O R E C A S E 忽略字母的大小写
N O R M I G N O R E K A N AT Y P E 不区分平假名与片假名字符
N O R M I G N O R E N O N S PA C E 忽略无间隔字符
N O R M I G N O R E S Y M B O L S 忽略符号
N O R M I G N O R E W I D T H 不区分单字节字符与作为双字节字符的同一个字符
S O RT S T R I N G S O RT 将标点符号作为普通符号来处理
当l s t r c m p调用C o m p a r e S t r i n g时,它传递0作为f d w S t y l e的参数。但是,当l s t r c m p i调用

C o m p a r e S t r i n g时,它就传递N O R M I G N O R E C A S E。C o m p a r e S t r i n g的其余4个参数用于设定两

个字符串和它们各自的长度。如果为c c h 1参数传递- 1,那么该函数将认为p S t r i n g 1字符串是以0
结尾,并计算该字符串的长度。对于p S t r i n g 2字符串来说,参数c c h 2的作用也是一样。
其他C运行期函数没有为U n i c o d e字符串的操作提供很好的支持。例如, t o l o w e r和t o u p p e r
函数无法正确地转换带有重音符号的字符。为了弥补C运行期库中的这些不足,必须调用下面
这些Wi n d o w s函数,以便转换U n i c o d e字符串的大小写字母。这些函数也可以正确地用于A N S I
字符串。