C问题中的字符串操作

its*_*leb 3 c string pointers

可能重复:
为什么简单的C代码会收到分段错误?

嘿大家,我确定这是一个非常基本的问题,但显然我在这里并不是很了解.

在寒假期间,我一直在和C玩弄很多东西,只是遇到了一些我觉得可行的东西,却给了我一个分段错误.

如果我将字符串声明为:char name [5] ="Mike"; 我可以操纵字符串:*(name + 1)='a'; 这很好用,名字变成"Make".

如果我声明为:char*name ="Mike"; 然后尝试相同的事情:*(name + 1)='a'; 我遇到了分段错误.为什么我不能这样做?

如果我malloc空格的字符串:char*name =(char*)malloc(5*sizeof(char)); 然后将字符串复制到name:strcpy(name,"Mike"); 我可以像上面那样操纵它就好了.*(name + 1)='a'; 作品.

char*name ="Mike"'和char*name =(char*)malloc(5*sizeof(char))之间有什么区别; 的strcpy(姓名, "迈克");? 它们不只是指向包含字符串的内存吗?

抱歉,这是一个noobish问题!

Mar*_*tos 10

char name[5] = "Mike"声明一个本地数组并将字符串"Mike"复制到其中.char* name = "Mike"在没有复制的情况下指定一个指向"Mike"的指针.在这两种情况下,"Mike"是一个只读页面中的常量字符串,因此在第二种情况下,您尝试修改原始常量.