【发布时间】:2013-05-31 15:06:38
【问题描述】:
函数char* strrchr(const char *str, int ch) 返回str (const char *) 内的指针(char*),ch 的最后一次出现所在的位置。
所以我们可以编写以下代码,无需任何转换:
#include <string.h>
int main()
{
const char CONSTSTR[] = "foo/bar/foobar.txt";
char *ptr = strrchr (CONSTSTR, '/');
*ptr++ = 'B';
*ptr++ = 'A';
*ptr++ = 'D';
}
返回char*而不是const char*有什么好处?
编辑:
正如Shafik Yaghmour 指出的那样,How does strchr implementation work? 有很好的答案
由于我的代码是 C++,我将使用 <cstring> 而不是 <string.h>。感谢您的回答;-)
但是,Mike Seymour's answer 最适合这个问题。我什至添加了a more detailed answer below 以明确表示strrchr() 是一个C 函数(不允许重载),该声明同时适合const 和non-const 字符串。因为strrchr() 可以用non-const 字符串调用,所以返回的字符串也应该是non-const。
【问题讨论】:
-
请注意,由于您将此标记为
c++而不是c,因此您应该真正使用cstring,而不是string.h。 -
@BoBTFish:你为什么要用 std:: 前缀噪声感染你的程序?您是否允许出于任何目的重用出现在 string.h 标头中的名称?我当然不会。所以它们在 string.h 放置它们的全局范围内很好。
-
@BoBTFish:实际上这里的区别并不是纯粹的迂腐。
<cstring>提供了 C 中不可能提供的 const 正确的重载。
标签: c++ null-terminated strrchr const-string