可能重复:
为什么简单的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"是一个只读页面中的常量字符串,因此在第二种情况下,您尝试修改原始常量.
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |