免费注册 查看新帖 |

Chinaunix

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

请教一个字符串的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-05 20:24 |只看该作者 |倒序浏览
代码1:
int main(void)
{
   char s[] = "Hello";
   s[0] = "A";
   return 1;
}
代码2:
char s[] = "Hello";
int main(void)
{
   s[0] = "A";
   return 1;
}
【问题】
运行结果:1是错误的,而2正确!
请问为何将字符串设成外部变量,就可以修改?
多谢!
zhangyunlei 该用户已被删除
2 [报告]
发表于 2006-04-05 20:30 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2006-04-05 20:56 |只看该作者
2楼的说的对,另外错误的代码不一定每次运行都报错(好象是flw在某个帖子里说的话  )

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-04-05 20:58 |只看该作者
两个都是错误的.

论坛徽章:
0
5 [报告]
发表于 2006-04-05 21:05 |只看该作者
原帖由 mq110 于 2006-4-5 20:58 发表
两个都是错误的.

说的是:
s[0]="A";应该改成:
s[0]='A';

论坛徽章:
0
6 [报告]
发表于 2006-04-05 22:41 |只看该作者
说的是:  s[0]="A";应该改成:  s[0]='A';


实践出真知,按照楼上的说法改掉代码之后,因为手头没有gcc编译器,只好在vc6上试了一把,结果两个小程序都能正常运行,结果也都是对的:打印出来"Aello"了。

论坛徽章:
0
7 [报告]
发表于 2006-04-05 23:11 |只看该作者

回复 4楼 mq110 的帖子

感谢大家的热心指导!
不好意思
确是'A',发贴的时候太粗心。
我是在gcc下编译运行的.
从两个程序生成的汇编代码来看:
前者是将字符串"Hello"存放在.rdata(只读数据区吧?),而后又将其依次复制到s[];
而后者就是将"Hello"放在.data而已。
不知为何会如此处理?
继续求教中

论坛徽章:
0
8 [报告]
发表于 2006-04-06 13:26 |只看该作者

等待。。。

不能沉下去
自己up一个
老版收下留情啊!

论坛徽章:
0
9 [报告]
发表于 2006-04-06 22:49 |只看该作者
原帖由 BadSnail 于 2006-4-5 23:11 发表
感谢大家的热心指导!
不好意思
确是'A',发贴的时候太粗心。
我是在gcc下编译运行的.
从两个程序生成的汇编代码来看:
前者是将字符串"Hello"存放在.rdata(只读数据区吧?),而后又将其依次复制到s ...

错误!
前者,局部变量运行时存在main函数的栈帧中。
儿后者全局变量初始化数据区中(.data section中)

论坛徽章:
0
10 [报告]
发表于 2006-04-07 00:14 |只看该作者
原帖由 BadSnail 于 2006-4-5 20:24 发表
代码1:
int main(void)
{
   char s[] = "Hello";
   s[0] = "A";
   return 1;
}
代码2:
char s[] = "Hello";
int main(void)
{
   s[0] = "A";
   retu ...


代码1,2都是正确的吧!
只有这样定义了char  *s="hello"  才不能修改!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP