据我所知,如果我们在程序中声明char*
,那么它会从只读区域提供内存,因此我们无法在数组中的任何位置更改char
。
char *ch = "sitaram";
ch[2] = 'y';
上面的代码无法正常运行,因为我们正在更改只读内存。
一种方法是我们可以将char
数组声明为
char ch[] = "sitaram";
然后我们可以在索引处更改值。
我有什么方法可以在char
的任何索引处更改char*
值吗?
答案 0 :(得分:5)
使用现代C ++方法获取可变字符串值
std::string str{"sitaram"};
str[2] = 'y';
字符串文字(即""
中包含的值)默认为类型const char[n]
(其中n
是空字符的字符串文字+1
的长度)在C ++中,由于它们是不可变的,任何修改它们的尝试都会产生undefined behavior。
答案 1 :(得分:1)
使用char
数组:
char text[] = "sitaram";
text[3] = 'o';
char * p = &text[0];
p[4] = 'x';
cout << text;
答案 2 :(得分:1)
当你说:
char *ch = "sitaram";
编译器执行以下操作:
ch
,并使该指针指向静态分配的“sitaram”字符串。ch[2] = 'y'
,那么你正在尝试修改静态分配字符串的第3个字符。通常,你会崩溃(因为它在只读内存中)另一方面,如果您执行以下操作:
char ch[] = "sitaram";
当程序点击此行时,它为数组ch[]
(8个字符)分配内存,然后将字符串“sitaram”复制到此内存中。如果你做ch[2] = 'y'
,那么你修改这个分配的内存,这是完全可以的。
如果要使用char *
修改字符串,则应指向可修改的内存。例如:
char ch[] = "sitaram";
char *xx = ch;
xx[2] = 'y'; // it is the same as ch[2] = 'y';