BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #90760同步于 2016/3/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

char * str = "hope"; str[2] = 'p';

du5307
2016/3/25镜像同步7 回复
早上遇到的一个问题。字符串反转,函数传进去指针,函数内交换。 最后问题简化成下面的两行代码。 char * str = "hope"; str[2] = 'p'; segmentation fault 改成 char str[] = "hope"; str[2] = 'p'; 可以通过。 求大神解惑。。。。 第一种情况为什么不能写。。。 谢谢…
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
nuanyangyang机器人#1 · 2016/3/25
【 在 du5307 的大作中提到: 】 : 早上遇到的一个问题。字符串反转,函数传进去指针,函数内交换。 : 最后问题简化成下面的两行代码。 : char * str = "hope"; str[2] = 'p'; segmentation fault : ................... 第一种情况,"hope"是一个字符串常量,它的值是一个指针,指向一块只读的存储空间,里面存着'h', 'o', 'p', 'e', '\0'一共5个字符。str是一个指针,初值是上述指针。(安全的写法是const char * str = "hope",毕竟指向的目标不可变) 第二种情况,str是一个可读写的存储空间,里面存5个字符,初值也是'h', 'o', 'p', 'e', '\0',但可以变。
du5307机器人#2 · 2016/3/25
1.还有问题,为什么这么定义了 它就是字符串常量了 然后就不能写了。。。。。这是规定么。。。 2.是不是可以这样理解 char * str = "hope" 从效果上等价于 const char * str 但是这种效果不是因为const 是因为 这个值本身就不可写 【 在 nuanyangyang 的大作中提到: 】 : : 第一种情况,"hope"是一个字符串常量,它的值是一个指针,指向一块只读的存储空间,里面存着'h', 'o', 'p', 'e', '\0'一共5个字符。str是一个指针,初值是上述指针。(安全的写法是const char * str = "hope",毕竟指向的目标不可变) : 第二种情况,str是一个可读写的存储空间,里面存5个字符,初值也是'h', 'o', 'p', 'e', '\0',但可以变。
du5307机器人#3 · 2016/3/25
看到了。。。。 在书上看到了。。。。 谢谢~~~~ANSI c 中,初始化指针时创建的字符串常量被定义为只读。 【 在 nuanyangyang 的大作中提到: 】 : : 第一种情况,"hope"是一个字符串常量,它的值是一个指针,指向一块只读的存储空间,里面存着'h', 'o', 'p', 'e', '\0'一共5个字符。str是一个指针,初值是上述指针。(安全的写法是const char * str = "hope",毕竟指向的目标不可变) : 第二种情况,str是一个可读写的存储空间,里面存5个字符,初值也是'h', 'o', 'p', 'e', '\0',但可以变。
nuanyangyang机器人#4 · 2016/3/25
【 在 du5307 的大作中提到: 】 : 1.还有问题,为什么这么定义了 它就是字符串常量了 然后就不能写了。。。。。这是规定么。。。 首先,char * str定义str是一个指针,指向char。 然后,右边是"hope",它是一个字符串常量。字符串常量都是只读的存储空间。 而第二种情况是一种特殊语法,char str[] = "hope",右边不是字符串常量,这整个定义是字符数组的初始化。 : : 2.是不是可以这样理解 : ................... 它是只读的,根本原因是“它是字符串常量”。和str如何定义无关。char * str = "hope"严格地说不是完全正确的,因为右边是指向只读空间的指针,左边是指向读写空间的指针,这里有个隐含的(而且不安全的)指针类型转换的过程。
nuanyangyang机器人#5 · 2016/3/25
【 在 du5307 的大作中提到: 】 : 看到了。。。。 : 在书上看到了。。。。 : 谢谢~~~~ANSI c 中,初始化指针时创建的字符串常量被定义为只读。 其实你还可以这样: const char *a; a = "hello"; puts(a); a = "world"; puts(a); a = "haha"; puts(a); 每次给a赋的都是一个指向不可变的空间的指针。
du5307机器人#6 · 2016/3/25
嗯 GET! 字符串常量。。。。。 这个隐式的转换点赞。。。。。 【 在 nuanyangyang 的大作中提到: 】 : : 首先,char * str定义str是一个指针,指向char。 : 然后,右边是"hope",它是一个字符串常量。字符串常量都是只读的存储空间。 : ...................
du5307机器人#7 · 2016/3/25
嗯 敲过了 顺便把 char const * char * const 也试了。。。。 最后再谢谢下~! 【 在 nuanyangyang 的大作中提到: 】 : : 其实你还可以这样: : [code=c] : ...................