免费注册 查看新帖 |

Chinaunix

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

问个幼稚问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-30 21:42 |只看该作者 |倒序浏览


  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.     char *a="I am a good boy!", *b="I love xiaoya,shi very much!";
  5.     int i;
  6.     for(i=0; *(a+i)!='\0'; i++)
  7.         *(b+i)=*(a+i);
  8.     *(b+i)='\0';
  9.    
  10.     printf("a is %s\nb is %s", a, b);
  11.     getch();
  12.     return 0;
  13. }
复制代码

为什么在TC里编译没错,用GCC编译,运行就会崩溃

论坛徽章:
0
2 [报告]
发表于 2007-01-30 21:54 |只看该作者
--

这个问题真的不幼稚。
和内存管理机制有关。
当然不同的编译器对 string constants 的处理方法也不一。
我回答不好

我所知道的处理方法之一:把字符串存到 char 的数组里,然后用指针指过去访问。

--

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
3 [报告]
发表于 2007-01-30 22:05 |只看该作者
DOS里所有内存都是R&W
LINUX/UNIX里CONST是只读的,所以会发生通用保护故障
要发现此类问题需了解"string...."的正确类型是const char (*)[]
因此比较好的书写方式是const char *p = "string...";

论坛徽章:
0
4 [报告]
发表于 2007-01-30 22:07 |只看该作者
1、标准说这种串是不可写的。
2、TC 不规范,而且 TC 输出的可执行文件格式不支持内存保护。
3、gcc 和  vc 都有命令行参数使得这些串变成可写的。


让这种串可写显然不是好主意,容易越界。

论坛徽章:
0
5 [报告]
发表于 2007-01-30 22:12 |只看该作者
学到了,看来得看标准C了,我受破书影响,讨厌的TC

论坛徽章:
0
6 [报告]
发表于 2007-01-30 22:25 |只看该作者
原帖由 wodetian 于 2007-1-30 22:12 发表
学到了,看来得看标准C了,我受破书影响,讨厌的TC


TC的确是标准C,而且是一代经典,这样评价TC会让好多人伤心的

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
7 [报告]
发表于 2007-01-30 22:47 |只看该作者
编译器是无罪的,有罪的只是“书”

论坛徽章:
0
8 [报告]
发表于 2007-01-31 10:22 |只看该作者
注意一下这个问题吧,等你哪天参加笔试的时候,你就会遇到她!

论坛徽章:
0
9 [报告]
发表于 2007-01-31 14:49 |只看该作者

re:

上面的回答很受益哦,但是我在老潭的C语言书上看到的解释是:这样指针直接初始化字符串值,指针有可能指向不明确的地方,造成程序崩溃,不知道对不对

论坛徽章:
0
10 [报告]
发表于 2007-01-31 16:12 |只看该作者
原帖由 andyxie407 于 2007-1-31 14:49 发表
上面的回答很受益哦,但是我在老潭的C语言书上看到的解释是:这样指针直接初始化字符串值,指针有可能指向不明确的地方,造成程序崩溃,不知道对不对

不对,指针指向的是字符串常量的地址,但是修改该字符串会导致段错误,字符串常量是只读的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP