函数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*有什么好处?
编辑:
正如一位沙菲克·亚格穆尔所指出的,strchr实现是如何工作的?有很好的答案
由于我的代码是用C++编写的,所以我将使用<cstring>而不是<string.h>。谢谢你的回答;-)
然而,迈克·西摩的回答最适合这个问题。我甚至添加了下面是一个更详细的答案来明确表示strrchr()是一个C函数(重载是不允许的),声明既适合const字符串,也适合非const字符串。因为可以用非const字符串调用strrchr(),所以返回的字符串也应该是non。
发布于 2013-05-31 15:24:06
在C中,函数必须是这样的,或者强制用户在许多情况下使用欺骗强制转换:
const指针,则无法搜索const字符串;const指针,则无法使用它修改非const字符串。在C++中,您应该包括<cstring>,而不是被弃用的C专用头。这将给您两个正确的重载,这在C中是无法做到的:
const char* strchr(const char* s, int c);
char* strchr( char* s, int c);发布于 2013-05-31 15:10:49
您正在查看C标准库(<string.h>)中的遗留函数。C++库(<cstring>)引入了过载,因此您应该尽可能地使用它。
发布于 2013-05-31 15:10:25
const char *str意味着strrchr保证不修改str。
返回const char *意味着strrchr禁止您修改返回的值。
https://stackoverflow.com/questions/16860418
复制相似问题