这里还有另一个“重新发明车轮”的问题,我们在C++类的介绍中给出了这个问题:
编写一个函数,返回字符串中字符序列第一次出现的位置,即
strstr函数的变体。
我开始编写函数如下:
int strstr2(const char *text, const char *pattern) {
int pos = 0;
char *temp;
temp = text;
}我想我会记得字符串的第一个字符的地址,以便以后在函数中使用,但是编译器说:
类型"const char*“的值不能分配给"char*”类型的实体。
我知道一旦一个常量被初始化,就不能改变它,但是为什么我不能将一个指向一个常量的指针分配给另一个非常数指针呢?
我读了几个关于指针和常量的问题,似乎this post已被接受的答案的底部可能会回答我的问题,但我不能百分之百肯定,因为对我来说讨论仍然太高级了。
我的第二个问题是,解决办法是什么?如何定义指向字符串开头的指针?
谢谢。
发布于 2018-11-19 16:07:34
如果这项任务是允许的,你可以合法地写:
*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;,这是合乎逻辑的。
发布于 2018-11-19 16:06:52
这是const-正确性类型安全的一部分.因为text是指向const char的指针,所以您不能通过它修改它指向的字符。这是件好事,也是一项安全措施。
但是,如果允许将指针分配给它,则整个安全性将失效!因为比你要修改字符通过所述指针和绕过安全!
因此,这个作业是不允许的。要修复它,请将temp标记为指向const:const char* temp的指针。
https://stackoverflow.com/questions/53378372
复制相似问题