为了比较任何字符串而不考虑它们的情况,有各种C库函数,例如strcasecmp()
,stricmp()
和stricmpi()
。这些有什么区别?
答案 0 :(得分:7)
有很多方法可以做很多事情,主要是因为标准流程落后于实现。人们看到需要一个函数(在这种情况下,不区分大小写的字符串比较),一些编译器编写器/库编写器实现一个名为strcmpi
的函数,而另一个组实现stricmp
,而另一个组决定它是没有必要实现它,而另一个小组实现strcasecmp
而另一个小组实现strcmpnocase
等。多年后,来自不同小组的代表在致命的战斗中相遇,获胜者的实施成为语言。同时,其他实现继续使用其他命名的方法,语言变得更强/片段/收益膨胀(取决于您的观点)。
答案 1 :(得分:6)
C99 Standard(或POSIX.1-2008 )描述stricmp()
或strcmpi()
。
以不区分大小写的方式比较字符串的标准方法是在使用strcmp()
之前将两者转换为小写(或大写)。
POSIX功能为strcasecmp()
。
答案 2 :(得分:2)
两者都是非标准扩展,即不属于“C语言”(由ISO / IEC 9899规定)。
在MSDN上提到strcmpi()
为deprecated,错误地将其称为“POSIX函数”并将_stdicmp
称为替换(仅稍微好一些)。
stricmp()
在维基百科上被称为popular,但仍然是非标准的。
您必须了解任何库实现都可以随意提供其他功能。与open()
和read()
,OpenFile()
,AllocMem()
等等一样 - 这些都不是“C语言”,只是在中实现 C,在一个或多个平台上工作,但在其他平台上不一定可用。
答案 3 :(得分:0)
int strcmpi(const char *s1, const char *s2);
int stricmp(const char *s1, const char *s2);
strcmpi(作为调用stricmp的宏实现)执行s1到s2的无符号比较,不区分大小写。 strcmpi执行s1到s2的无符号比较,没有区分大小写。
要使用strcmpi
,您必须包含STRING.H
。 提供此宏
与其他C编译器的兼容性。