替换C ++指针字符串中的字符?

时间:2013-08-15 17:37:04

标签: c++ pointers

假设我在C ++中有这个:

char *p = "Apple";

我不能这样做:

p[1] = 'w';

但我为什么要这样做?

p = "OrangeTorange";

3 个答案:

答案 0 :(得分:3)

因为p指向常量字符串文字,所以如果你这样做:p[1] = 'w';那么你试图修改只读常量的字符串文字及其非法操作(未定义)行为)。

而在表达式p = "OrangeTorange";中,您修改了p 变量的值,该值是指向char的指针。将新地址值分配给p是一个有效的操作,现在p开始指向新的字符串文字。

要进一步添加,假设p指向数组,p[1] = 'w';不是无效操作,请考虑以下示例代码:

char str[] = "Apple";
char* p = str; // p points to a array 
p[1] = 'w';    // valid expression, not str[1] = 'w' is well valid. 
p = "OrangeTorange";   // is valid
// str = "OrangeTorange"; is NOT valid as `str` is not a pointer but array name

此处所提出的两项操作均有效!

注意:两个声明char *strchar str[]不同。要理解它,请阅读:What does sizeof(&arr) return?

答案 1 :(得分:3)

p[1] = 'w'正在尝试修改字符串文字,这是非法的。 p = "OrangeTorange"只是为p指定了不同的字符串文字,这很好。

答案 2 :(得分:0)

您无法修改原始字符串,因为它是只读数据。您可以将指针修改为指向不同的字符串,因为指针是可修改的。也就是说,p = "OrangeTorange"不会修改原始字符串,只会更改指针p指向的位置。