0

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

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

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

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

-普拉桑特

4

4 回答 4

2

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

从评论中添加更新。

于 2013-08-03T12:14:48.077 回答
0
char *p ="abcdefg";// p is pointing a read only memory.
   *p = 'Z';       //You want write a read memoty . 
于 2013-08-03T12:15:31.267 回答
0

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

于 2013-08-03T12:21:38.403 回答
-1

这是因为您正在使用*分配。你的代码基本上是这样写的:在其地址p是类型pointer存储值Z,它是类型char

于 2013-08-03T12:15:06.250 回答