字符串常量

圣诞老人123 2011-07-16 08:27:44
在QT中 char* p = "hello"; *p = 'A'; 这玩意能执行!!

用gcc 编译运行 就会挂~~~

这是为啥= =!
字符串常量 不是不能改么~~~

还有

char te[]="asadfsaj" 数组

*te = 'f'这个可以~~ "asadfsaj"不也是字符串常量么不也不好改么~~~


求真理~~~~
...全文
92 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 schoolers 的回复:]

指针指向一个字符串常量,之后它可以被修改以指向其它地址,但如果试图修改字符串的内容,结果是没有定义的。

数组则可以修改其内容。
[/Quote]
++

没有定义的就是没有标准,取决于实现
飞天御剑流 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenyongsuda 的回复:]
在QT中 char* p = "hello"; *p = 'A'; 这玩意能执行!!

用gcc 编译运行 就会挂~~~

这是为啥= =!
字符串常量 不是不能改么~~~

还有

char te[]="asadfsaj" 数组

*te = 'f'这个可以~~ "asadfsaj"不也是字符串常量么不也不好改么~~~


求真理~~~~
[/Quote]

“字符串常量不能修改”是错误的,C/C++并没有禁止对字符串字面量的修改,而是属于未定义行为,一个实现如何处理都没有违反标准。

http://blog.csdn.net/supermegaboy/article/details/4854987
yeelone 2011-07-16
  • 打赏
  • 举报
回复
学习了。C语言太久没碰,都忘了
uniqueroy 2011-07-16
  • 打赏
  • 举报
回复
char * p = "123";

这样p 被强制转换为 const char *
至于数组, 那是初始化方式。
某某9 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shanki_pm 的回复:]

其实
char* p = "hello";
原来是这么写的:
const char* p = "hello";
只不过后来把const给省略了。。

我记得什么地方有这个说法。
[/Quote]

好像gcc编译器就是这么做的,不加const会给一个warning
南京浪人甲 2011-07-16
  • 打赏
  • 举报
回复
char te[]="asadfsaj"
是数组的一种初始化方式,不存在“常量”的问题
至善者善之敌 2011-07-16
  • 打赏
  • 举报
回复
char* p = "hello";//字符常量区,是不能被修改的
南京浪人甲 2011-07-16
  • 打赏
  • 举报
回复
其实
char* p = "hello";
原来是这么写的:
const char* p = "hello";
只不过后来把const给省略了。。

我记得什么地方有这个说法。
某某9 2011-07-16
  • 打赏
  • 举报
回复
指针指向一个字符串常量,之后它可以被修改以指向其它地址,但如果试图修改字符串的内容,结果是没有定义的。

数组则可以修改其内容。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧