为什么有多个C函数用于不区分大小写的比较

时间:2014-05-26 13:35:41

标签: c string posix msvcrt crt

为了比较任何字符串而不考虑它们的情况,有各种C库函数,例如strcasecmp()stricmp()stricmpi()。这些有什么区别?

4 个答案:

答案 0 :(得分:7)

有很多方法可以做很多事情,主要是因为标准流程落后于实现。人们看到需要一个函数(在这种情况下,不区分大小写的字符串比较),一些编译器编写器/库编写器实现一个名为strcmpi的函数,而另一个组实现stricmp,而另一个组决定它是没有必要实现它,而另一个小组实现strcasecmp而另一个小组实现strcmpnocase等。多年后,来自不同小组的代表在致命的战斗中相遇,获胜者的实施成为语言。同时,其他实现继续使用其他命名的方法,语言变得更强/片段/收益膨胀(取决于您的观点)。

答案 1 :(得分:6)

C99 StandardPOSIX.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编译器的兼容性。