免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8658 | 回复: 31
打印 上一主题 下一主题

linux中的字符串常量不能修改吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-25 11:18 |只看该作者 |倒序浏览
我在gcc下用 char *s = "abc" 这样的语句,串s中的内容不能修改,是不是这个串是存放在只读存储区中的?

论坛徽章:
0
2 [报告]
发表于 2005-11-25 11:20 |只看该作者
是,但严格地说,这个跟 linux 没有关系。

论坛徽章:
0
3 [报告]
发表于 2005-11-25 11:24 |只看该作者
哦,是的,刚用vc试了一下也不行,谢谢了

论坛徽章:
0
4 [报告]
发表于 2005-11-25 11:34 |只看该作者
不论放在哪个操作系统都是不能修改的只读吧 ^_^

在VC里 修改一下看看 马上弹出一个窗口 呵呵:)

论坛徽章:
0
5 [报告]
发表于 2005-11-25 15:16 |只看该作者
只是有些编译环境下可以改,按标准是不能改的。

论坛徽章:
0
6 [报告]
发表于 2005-11-25 15:26 |只看该作者
Tubro C可以改,如果没记错的话

论坛徽章:
0
7 [报告]
发表于 2005-11-25 15:52 |只看该作者
常亮可以改?
那跟变量有什么区别呢?
请明白的人讲讲!
我开始模糊了

论坛徽章:
0
8 [报告]
发表于 2005-11-25 16:03 |只看该作者
具体什么编译器记不清了,反正我改得起。好象是TC2。0

论坛徽章:
0
9 [报告]
发表于 2005-11-26 10:23 |只看该作者
C89规定对其更改是未定义的
因为一般那是不用更改的,所以编译器把它放到一个地方,似乎在告诉操作系统"如果我这个程序想更改这个地方的内容你就抱错吧,因为这基本上说明我的程序本身有问题" ,当然,你有可能捕获这个异常 ,并显示一些信息然后结束.  不过 在dos这样的系统中没有这样的保护机制,所以TC2.0当然不会去抱错了.
这里操作系统提供了保护的机制,而什么内容需要保护,比如什么数据只读不能写,是编译器的事情,
至于常量,变量,操作系统的内核中没有这个概念,因为只有你的编译器去翻译, 编译器甚至可以认为加有const的是变量(当然不会这么干了)  变量和常量在这个意义上的区别就是存储的地方可能不同.

论坛徽章:
0
10 [报告]
发表于 2005-11-26 10:31 |只看该作者
必须要搞清楚编译时和运行时的区别。就了解为什么可以改变了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP