char *赋值的分段错误

时间:2013-08-03 12:06:01

标签: c pointers

我试图在以下程序中了解char *赋值的分段错误* p ='Z'

void main()
{
   char *p ="abcdefg";
   *p = 'Z';
}

当Google搜索时,我确实找到了许多答案的链接,如下所示 1.这是一个字符串文字,一旦分配就不能改变它的值 2.字符串文字不能分配给* p 3.拿一个可以变换的malloc ......等等......

但我担心的是,如果字符串文字值不能改变,因为它是常量,当我们改变整数的常量值时,我们怎么不分段错误。 有人可以帮助我更好地理解这一点吗?

-Prashanth

4 个答案:

答案 0 :(得分:1)

这是未定义的行为。如果您有一个常量字符串,标准表示可能不会修改字符串文字。所以它是否可写是否取决于架构,它可能,也可能不是段错误。

从评论中添加

更新

答案 1 :(得分:0)

char *p ="abcdefg";// p is pointing a read only memory.
   *p = 'Z';       //You want write a read memoty . 

答案 2 :(得分:0)

第一个*是点的变量,它表示p是一个指向char的点,因此int * p是指向整数值的点,这是点的变量。 p,而不是* p,是一个点,它的值是内存中char值的地址,你可以通过printf测试它(“p =%d”,p); p包含* p的值或char变量。所以,你可以说* =“指针指向的值......”和& =“价值地址......在记忆中”。所以,而不是char * p,temp;温度= 'A'; * p = temp;(指针p指向变量temp的相等值的值)

答案 3 :(得分:-1)

这是因为您使用*进行分配。您的代码基本上是:p的地址pointer类型存储值Z,类型为char