个人认为: strrchr()名字中的‘r’应该是单词“reverse”的缩写,是反向的意思。 C++标准库中,迭代器的begin()方法通常有对应的rbegin()方法,其中的‘r’就是“reverse”的意思。
我在网上查了一下,的确支持你这种说法的证据更多一些。谢谢指出!
char *strchr(const char *s, int c); char *strrchr(const char *s, int c); 这两个函数的原型应该是下面的吧: char *strchr(const char *s, char c); char *strrchr(const char *s, char c);
你man一下。不要想当然。
strrstr与strchr类似,但是从右向左找字符c,找到字符c第一次出现的位置就返回.
随便查看了以下三个库的源文件:
glibc-2.10
newlib-1.17
gdb
不是从右向左找字符;
同样是从左像右找字符,只是存储中间数据,找到最后一个出现字符c的万恶位置。
贴一下glibc-2.10的源码:
/* Find the last occurrence of C in S. */
char *
strrchr (const char *s, int c)
{
register const char *found, *p;
c = (unsigned char) c;
/* Since strchr is fast, we use it rather than the obvious loop. */
if (c == '\0')
return strchr (s, '\0');
found = NULL;
while ((p = strchr (s, c)) != NULL)
{
found = p;
s = p + 1;
}
return (char *) found;
}
不错,如果从右往左找,首先要找一遍\0,然后再找字符c,而这样只需找一遍就行了。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!