该函数char* strrchr(const char *str, int ch)返回()中最后一次出现的指针(char*).strconst char *ch
所以我们可以编写以下代码而不需要任何转换:
#include <string.h>
int main()
{
const char CONSTSTR[] = "foo/bar/foobar.txt";
char *ptr = strrchr (CONSTSTR, '/');
*ptr++ = 'B';
*ptr++ = 'A';
*ptr++ = 'D';
}
Run Code Online (Sandbox Code Playgroud)
返回的优势char*是const char*什么?
编辑:
正如Shafik Yaghmour指出的那样,strchr实现如何工作有很好的答案?
由于我的代码是在C++中,我将使用<cstring>而不是<string.h>.谢谢你的回答;-)
然而,Mike Seymour的答案最适合这个问题.我甚至在下面添加了一个更详细的答案,清楚地说strrchr()是一个C函数(不允许重载),声明适合const和非const字符串.因为strrchr()可以使用非const字符串调用,所以返回的字符串也应该是非const …
我正在使用函数strrchr进行一些测试,但我无法理解输出:
$text = 'This is my code';
echo strrchr($text, 'my');
//my code
Run Code Online (Sandbox Code Playgroud)
好的,该函数在最后一次出现之前返回了字符串
$text = 'This is a test to test code';
echo strrchr($text, 'test');
//t code
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,为什么函数返回"t代码",而不是"测试代码"?
谢谢
考虑一下我快速编写的这个函数来查找字符串中给定char的最后一次出现,并返回它在字符数组中的位置,该字符在物理上是字符串:
size_t strlstchar(const char *str, const char ch)
{
char *chptr = strrchr(str, ch);
return chptr - str;
}
Run Code Online (Sandbox Code Playgroud)
我只是在这里快速输入这个(没有编译或任何),因为我对一些事情有疑问.
对我来说,这似乎是找到哪个数组元素保存特定char的最后一个实例的最简单的解决方案,但我不知道它是如何工作的.我刚刚根据strrchr的文档做了这个,所以它在技术上是strrchr完成所有的工作.我无法想象这是实现这一目标的最佳方式(在性能方面),并且希望有人可以提供一些关于最佳方法的信息.
strrchr是一种有效的方法吗?或者strrchr最好留给其他一些用途?
我想知道两种不同用途之间的区别.我相信一些非常微妙的区别.
这是IBM参考手册中的解释.不过也许我的英语很糟糕,我无法想象其中的差异.
也许向我展示两种情况的例子可以帮助我更好地理解这一点.
以下是IBM的解释:
strchr子例程返回一个指针,该指针指向由String参数指向的字符串中的Character (转换为无符号字符)参数指定的第一个字符.如果字符串中没有出现该字符,则返回空指针.终止字符串的空字节被视为字符串的一部分.
strrchr子例程返回一个指针,该指针指向由String参数指向的字符串中的Character (转换为字符)参数指定的最后一个字符.如果字符串中没有出现该字符,则返回空指针.终止字符串的空字节被视为字符串的一部分.