除了额外的参数,memchr()和strchr()之间的实际区别是什么?您什么时候使用其中一个或另一个?如果解析一个大文件(从理论上讲),用memchr()代替strchr()会有更好的性能吗?
发布于 2010-11-24 03:45:30
strchr在遇到空字符时停止,而memchr不需要;这就是为什么前者不需要长度参数,而后者需要。
发布于 2010-11-24 03:46:05
在功能上没有区别,因为它们都扫描数组/指针以获取所提供的值。memchr版本只接受一个额外的参数,因为它需要知道提供的指针的长度。strchr版本可以避免这种情况,因为它可以使用strlen来计算字符串的长度。
如果您尝试使用strchr存储二进制数据的char*,则可能会出现不同之处,因为它可能看不到字符串的完整长度。几乎所有包含二进制数据和str*函数的char*都是如此。对于非二进制数据,它们实际上是相同的函数。
实际上,可以相当容易地用memchr对strchr进行编码
const char* strchr(const char* pStr, char value) {
return (const char*)memchr(pStr, value, strlen(pStr)+1);
}这里需要+1,因为strchr可以用来查找字符串中的空终止符。这绝对不是一个最佳的实现,因为它遍历了两次内存。但它确实证明了两者在功能上有多么接近。
发布于 2010-11-24 03:45:22
strchr要求第一个参数以null结尾,因此不需要长度参数。
memchr的工作方式与此类似,但并不期望内存块是以空值结尾的,因此您可能成功地搜索到了\0字符。
https://stackoverflow.com/questions/4260109
复制相似问题