strcmp与strcasecmp差异

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"));
}

结果:


运行结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容