除了额外的参数之外,memchr()
和之间的实际差异是什么strchr()
?你什么时候使用其中一个?并且会有一个更好的结果的性能取代strchr()
通过memchr()
,如果解析大文件(从理论上说)?
在功能上没有区别在于它们都扫描数组/指针以获得提供的值.该memchr
版本只需要一个额外的参数,因为它需要知道提供的指针的长度.该strchr
版本可以避免这种情况,因为它可以strlen
用来计算字符串的长度.
如果您尝试使用char*
存储二进制数据的差异,则可能会弹出差异,strchr
因为它可能无法查看字符串的全长.几乎任何char*
二进制数据和str*
函数都是如此.对于非二进制数据,尽管它们实际上是相同的功能.
实际上,你可以编写起来strchr
来讲memchr
很容易
const char* strchr(const char* pStr, char value) {
return (const char*)memchr(pStr, value, strlen(pStr)+1);
}
Run Code Online (Sandbox Code Playgroud)
这+1
是必要的,因为strchr
可以用来在字符串中找到空终止符.这绝对不是一个最佳实现,因为它会将内存走两次.但它确实有助于证明两者在功能上的接近程度.
strchr
期望第一个参数以 null 终止,因此不需要长度参数。
memchr
工作原理类似,但不期望内存块以空终止,因此您可能正在\0
成功搜索字符。
归档时间: |
|
查看次数: |
9423 次 |
最近记录: |