C标准库中的函数strcmpi是否符合ISO标准?

4

我注意到了Linux和Windows之间的差异。在Windows的C标准库实现中,有一个叫做strcmpi的函数,但在GNU的C标准库实现中却没有。请问,C标准库中的strcmpi函数是否被ISO定义过?如何获取标准文件呢?谢谢。


1
请注意,“不区分大小写比较”并不是一件简单的事情。您想要一个在所有语言环境下都表现相同的比较方式,这是解析HTML或类似内容所需的吗?还是您想要一个适用于当前语言环境(可能与实际输入文本语言不匹配)或尝试同时适用于所有自然语言的比较方式?您是否希望它考虑排序规则等因素?等等。 - R.. GitHub STOP HELPING ICE
3个回答

11

POSIX标准(也称为UNIX)有 strcasecmp() 但它不是C99 / ISO-C的一部分。

注意:如果您将上述引用与例如 strcmp() 的引用进行比较,您会注意到后者明确引用了ISO-C,而前者没有。这是 OpenGroup 引用的一个有用特性。

编辑:由于语言环境依赖性被提及为一种复杂情况,请参见上面的 strcasecmp_l() 的参考文献,该函数允许显式地指定用于转换的语言环境。Windows也有专门用于此目的的_strcmpi_l(),同样遵循其自己的命名约定。


你确定它是POSIX的一部分吗?我认为微软试图符合POSIX标准。 - Mark Ransom
1
Microsoft的POSIX兼容性是一个可选开关/编译时需要请求的内容(以获取某些情况下的附加头文件/更改原型)。此外,POSIX一直在不断发展;微软曾经认证过一个(非常古老的)POSIX标准,这并不意味着它保持了最新状态。 - FrankH.
此外,“POSIX” - 我一直在使用这个术语来描述IEEE1003(由OpenGroup指定/认证的UNIX标准,称为“Single UNIX规范”)。 - FrankH.
注:这也不是 C 2011 的一部分。 - PJTraill

0

不是的,这是一个非标准扩展。类Unix系统通常有一个strcasecmp函数,它执行与MS的strcmpi相同的任务。


0

不是的,在标准中快速使用 CTRL+F 搜索 strcmpi 并没有返回任何结果。这意味着它是一种非标准扩展(Windows 和 GNU 都有很多这样的扩展)。


我怎样才能获取标准文件?谢谢。 - JACK M
JACK M:实际上需要花钱,但我通常会快速谷歌搜索“ISO C 11标准PDF”。 - orlp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接