管您想只要改的char*是好修改的

 

void change(char *source)
{
    source[0] = 'D';
    cout<<source<<endl;

}

考虑一下,你产生这样一个函数change它的图是将污染过来的字符串的第一单字符改成H,然后用是字符串打印出来

谁知道者函数为什么而这样吗?说不定编写这函数的程序员的名的率先只字母是D也说不定

 

吓了,现在咱们得以行使这函数了

char a[] = "Peter";
change(a);

咱们创建了一个字符串数组,它的内容是Peter

我们调用了change把Petter中的P改成了D,poor letter P

一切正常,我们赢得了一个Deter

 

而今有人使用了之类的代码调用change

char *a= "Petter";
change(a);

抑或你觉得创造一个变量太难为了,于是你直接传送了一个字符串过去

change("Peter");

接下来可怕的事体有了,你的先后来了充分,崩溃掉了,编译器会报告你写副职
xxx
时发出访问冲突要类似的错误原因,于是开始抱怨change函数编写者,他编写的函数怎么会让你的次崩溃了。

无辜的change编写者,在接受着您的埋怨,因为实际的真面目也是公往change函数传递了一个无法被再次改之字符串

 

 

哼吧,让咱看下下的代码

char *a = "Peter";
char b[] = "Peter";
char *c = new char[6];
strcpy_s(c, 6, "Peter");

a,b,c三单指针所负的情节都是peter,但这三独peter却在不同之地方

a所依靠的Peter位于常量区

b所依的居栈上

c所倚的厕堆上

 

于是任何对a对source所指的内容的修改都见面产出谬误

然您得让a指于一个初的地方,因为a是一个指针

a=b;

唯独对在栈上的b来说,你可修改b所倚的情,

倒无能够修改b

b=a;// error 不克修改b

即是C/C++规定:数组不可以赋值,所以b相当给一个指南针常量xxx *const

 

吓了,让咱们回过头来之前出错的那段代码

char *a= "Petter";
change(a);

change("Peter");

source所指的情还是放在常量区之

就此任何对source所指的内容的修改都见面产出谬误

 

Remember

永不拿一个字符串直接传送给一个函数或者赋值给一个char*品种的指针,除非您懂得这个字符串中的字符的情无会见为改动

争你恐怕会见窜是字符串的价值,请用char[],如果想采取字符串不转移量,请动const
char*