c语言 字符指针的问题

[复制链接]
查看11 | 回复2 | 2007-7-18 20:29:05 | 显示全部楼层 |阅读模式
貌似我回答过这个问题。我用vc编译,只要b设为数组就可以通过,b设为指针则报错,与a无关。错误为:"xxxxx"指令引用"xxxx"内存,该内存不能为“written”.char *b定义了一个常量字符串,编译器把它放在只读内存中。这样你调用copy_str时试图写这个内存区域,因此操作系统报错。而char b[]定义的是一个数据,编辑器把它放在数据区,是可以读写的。
回复

使用道具 举报

千问 | 2007-7-18 20:29:05 | 显示全部楼层
我在TC2下测试了,char *a="Hello,world!"; 和char a[]="Hello,world!";的程序,输出结果都相同,如下:a=Hello,[email protected]=Hello,world!b=Hello,world!不存在你说的问题。char *a="Hello,world!"; 和char a[]="Hello,world!";语句是有区别,区别为前者的a可以再次被赋一个值,指向其它内存地区,而后者的a如果作为指针册是常量,其指向的内容不能修改。但是本例中,程序并没有试图修改a和b的值,怎么定义结果都是相同的。
回复

使用道具 举报

千问 | 2007-7-18 20:29:05 | 显示全部楼层
简而言之,此问题在于两方面:1.函数copy_str()的调用时参数采用的是地址传递,这样在函数copy_str()内对行参form等的修改势必影响到实参a和b,即会修改a和b的值2.char *a="Hello,world!"; 等定义出的是字符串常量,其值不允许更改。而a[]="Hello,world!";等定义出的为数组,其值可以改变,所以就没有问题!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行