首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memchr()和strchr()之间的区别

memchr()和strchr()之间的区别
EN

Stack Overflow用户
提问于 2010-11-24 03:42:20
回答 5查看 11.6K关注 0票数 23

除了额外的参数,memchr()strchr()之间的实际区别是什么?您什么时候使用其中一个或另一个?如果解析一个大文件(从理论上讲),用memchr()代替strchr()会有更好的性能吗?

EN

回答 5

Stack Overflow用户

发布于 2010-11-24 03:45:30

strchr在遇到空字符时停止,而memchr不需要;这就是为什么前者不需要长度参数,而后者需要。

票数 16
EN

Stack Overflow用户

发布于 2010-11-24 03:46:05

在功能上没有区别,因为它们都扫描数组/指针以获取所提供的值。memchr版本只接受一个额外的参数,因为它需要知道提供的指针的长度。strchr版本可以避免这种情况,因为它可以使用strlen来计算字符串的长度。

如果您尝试使用strchr存储二进制数据的char*,则可能会出现不同之处,因为它可能看不到字符串的完整长度。几乎所有包含二进制数据和str*函数的char*都是如此。对于非二进制数据,它们实际上是相同的函数。

实际上,可以相当容易地用memchrstrchr进行编码

代码语言:javascript
复制
const char* strchr(const char* pStr, char value) {
  return (const char*)memchr(pStr, value, strlen(pStr)+1);
}

这里需要+1,因为strchr可以用来查找字符串中的空终止符。这绝对不是一个最佳的实现,因为它遍历了两次内存。但它确实证明了两者在功能上有多么接近。

票数 10
EN

Stack Overflow用户

发布于 2010-11-24 03:45:22

strchr要求第一个参数以null结尾,因此不需要长度参数。

memchr的工作方式与此类似,但并不期望内存块是以空值结尾的,因此您可能成功地搜索到了\0字符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4260109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档