首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能用另一个指向const char的指针初始化一个指针?

为什么不能用另一个指向const char的指针初始化一个指针?
EN

Stack Overflow用户
提问于 2018-11-19 15:57:12
回答 2查看 473关注 0票数 0

这里还有另一个“重新发明车轮”的问题,我们在C++类的介绍中给出了这个问题:

编写一个函数,返回字符串中字符序列第一次出现的位置,即strstr函数的变体。

我开始编写函数如下:

代码语言:javascript
复制
int strstr2(const char *text, const char *pattern) {
    int pos = 0;
    char *temp;
    temp = text;
}

我想我会记得字符串的第一个字符的地址,以便以后在函数中使用,但是编译器说:

类型"const char*“的值不能分配给"char*”类型的实体。

我知道一旦一个常量被初始化,就不能改变它,但是为什么我不能将一个指向一个常量的指针分配给另一个非常数指针呢?

我读了几个关于指针和常量的问题,似乎this post已被接受的答案的底部可能会回答我的问题,但我不能百分之百肯定,因为对我来说讨论仍然太高级了。

我的第二个问题是,解决办法是什么?如何定义指向字符串开头的指针?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-11-19 16:07:34

如果这项任务是允许的,你可以合法地写:

代码语言:javascript
复制
*temp = 'x'; // write to char* is legal in general

但在这种情况下这是不好的,因为你写的是一个常数。

标准可以说temp = text分配是合法的,而*text = 'x'是未定义的行为,但这是没有意义的,因为T*const T*之间唯一的区别是您是否可以写入它。

因此,C++不允许为T*类型分配const T*类型的值以避免以后做坏事,而是强制您在本例中使用const char* temp; temp = text;,这是合乎逻辑的。

票数 2
EN

Stack Overflow用户

发布于 2018-11-19 16:06:52

这是const-正确性类型安全的一部分.因为text是指向const char的指针,所以您不能通过它修改它指向的字符。这是件好事,也是一项安全措施。

但是,如果允许将指针分配给它,则整个安全性将失效!因为比你要修改字符通过所述指针和绕过安全!

因此,这个作业是不允许的。要修复它,请将temp标记为指向const:const char* temp的指针。

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

https://stackoverflow.com/questions/53378372

复制
相关文章

相似问题

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