在C语言中,memmem
函数用于在存储区中定位特定的字节序列。可以将其与strstr
相似,后者专用于以null终止的字符串。
是否有任何特殊原因可以将此功能作为GNU扩展而不是直接在标准库中使用?手册指出:
我可以看到它经过了几次修复,但是我想知道为什么它在某些发行版中没有像strstr
那样直接可用(如果不是更多的话)。它仍然会带来实现问题吗?
编辑(动机):我不会问这个问题,如果标准以其他方式决定它:包括memmem
但不包括strstr
。实际上,strstr
可能类似于:
memmem(str, strlen(str), "search", 6);
考虑到在C函数中既需要数据块又需要数据块的长度,这在C函数中是很常见的,但有点棘手,但还是很合逻辑的。编辑(2):来自评论和答案的另一个动机。引用Theolodis:
好吧,我完全同意,在使图书馆更轻松,更轻便方面,我总是乐于助人。但是然后...为什么同时使用
strncpy
和memcpy
(根据keltar的评论)...?我几乎可以问:为什么可怜的memmem
被“黑毛”了? 最佳答案
从历史上讲,即在该标准的第一次修订之前,C是由编译器编写者制作的。
对于strstr
,它有点不同,因为它是C委员会引入的,C89基本原理文档告诉我们:
C委员会没有解释为什么它没有发挥更广泛的功能,而不仅限于字符串,因此任何推理都只能是推测。我唯一的猜测是,用例被认为不够重要,不足以具有通用的memmem
而不是strstr
。请记住,在C的目标中有此要求(在C99基本原理中)“使语言保持简洁”。同样,即使POSIX也没有考虑将其包括在内。
在我所知的任何情况下,都没有人提出任何缺陷报告或提议包括memmem
。