为什么没有strnchr功能?

时间:2014-06-28 12:49:20

标签: c

作为其他C库函数,如strcpystrcat,有一个版本限制字符串(strncpy等)的大小,我想知道为什么有strchr没有这样的变体?

3 个答案:

答案 0 :(得分:17)

确实存在 - 它被称为memchr

http://en.wikipedia.org/wiki/C_string_handling

答案 1 :(得分:7)

在C中,术语“字符串”通常表示“空终止字符数组”,str*函数对这些字符串进行操作。您提到的函数中的n主要是为了控制输出

如果要在没有任何隐含终止语义的情况下对任意字节序列进行操作,请使用mem*系列函数;在您的情况下memchr应该满足您的需求。

答案 2 :(得分:0)

在某些Linux环境中定义了

strnchr和strnlen,例如https://manpages.debian.org/experimental/linux-manual-4.11/strnchr.9.en.html。真的有必要如果未找到strlen或strcmp \ 0终止符,则程序可能会在存储区末尾崩溃。不幸的是,这样的事情常常没有被标准化,或者为时太晚并且过于复杂。 C11中存在strnlen_s,但strnchr_s不可用。

您可能会在我的互联网页面https://www.vishia.org/emcdocu/html/portability_emC.html中找到有关此类问题的更多信息。我定义了一些C函数strnchr_emC ...等,这些函数提供了所需的功能。为了实现兼容性,您可以定义

#define strnchr strnchr_emC

在公共标头中,但特定于平台。请参阅https://www.vishia.org/emc/上的更多内容。您可以在https://github.com/JzHartmut

中找到源