strcmp与strcasecmp都可以对于字符串进行比较,相等返回0,不相等返回对应插值.
- 字母比较不相等,返回值不同,不影响大小比较
例如,P和A比较,strcmp(“P”,“A”)返回1 ;strcasecmp(“P”,“A”)返回17,即‘P’-‘A’。 - 非字母处理差异,strcasecmp是将非大写字符值减去32('a'-'A'),然后比较取值;strcmp为直接比较。
特殊的:"P"和"_"比较,strcmp(“P”,"_")返回-1;strcasecmp(“P”,"_")返回17,而‘P’-‘_’为-15。 - 典型场景:由数据库排序加载到内部进行二分法查找,含有_,使用strcasecmp比较存在BUG。
- 附录测试代码
#include <strings.h>
#include <string.h>
#include <stdio.h>
int main()
{
printf("%d,%d,%d\n",strcasecmp("P","_"),'P'-'_',strcmp("P","_"));
printf("%d,%d,%d\n",strcasecmp("P","-"),'P'-'-',strcmp("P","-"));
printf("%d,%d,%d\n",strcasecmp("P","A"),'P'-'A',strcmp("P","A"));
}
结果: