首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么strrchr()返回`char*‘而不是’`const char*‘?

为什么strrchr()返回`char*‘而不是’`const char*‘?
EN

Stack Overflow用户
提问于 2013-05-31 15:06:38
回答 5查看 2.8K关注 0票数 7

函数char* strrchr(const char *str, int ch)返回str (const char *)中的指针(char*),该指针是ch最后出现的位置。

因此,我们可以编写以下代码,而无需任何强制转换:

代码语言:javascript
复制
#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。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-31 15:24:06

在C中,函数必须是这样的,或者强制用户在许多情况下使用欺骗强制转换:

  • 如果使用非const指针,则无法搜索const字符串;
  • 如果它返回一个const指针,则无法使用它修改非const字符串。

在C++中,您应该包括<cstring>,而不是被弃用的C专用头。这将给您两个正确的重载,这在C中是无法做到的:

代码语言:javascript
复制
const char* strchr(const char* s, int c);
      char* strchr(      char* s, int c);
票数 7
EN

Stack Overflow用户

发布于 2013-05-31 15:10:49

您正在查看C标准库(<string.h>)中的遗留函数。C++库(<cstring>)引入了过载,因此您应该尽可能地使用它。

票数 13
EN

Stack Overflow用户

发布于 2013-05-31 15:10:25

const char *str意味着strrchr保证不修改str

返回const char *意味着strrchr禁止您修改返回的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16860418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档