作为其他C库函数,如strcpy
,strcat
,有一个版本限制字符串(strncpy
等)的大小,我想知道为什么有strchr
没有这样的变体?
答案 0 :(得分:17)
确实存在 - 它被称为memchr
:
答案 1 :(得分:7)
在C中,术语“字符串”通常表示“空终止字符数组”,str*
函数对这些字符串进行操作。您提到的函数中的n
主要是为了控制输出。
如果要在没有任何隐含终止语义的情况下对任意字节序列进行操作,请使用mem*
系列函数;在您的情况下memchr
应该满足您的需求。
答案 2 :(得分:0)
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
中找到源