免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: liudengme
打印 上一主题 下一主题

string copy problem [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-07-13 23:43 |只看该作者

string copy problem

char a[] = “hello”;
char *p = “world”; //注意p指向常量字符串

a[0] = ‘X’; //可以
p[0] = ‘X’;         //错误

就是说a的值可以改变。但p指向的常量字符串不可以改。

论坛徽章:
0
22 [报告]
发表于 2005-07-14 00:20 |只看该作者

string copy problem

有几个问题:
1、string_copy()函数是中的 to 是容器,你必须确保:有一个机制检查,这个容器有足够空间容纳 from 传来的东西。

2、确保指针的有效性,假如:你这样调用:string_copy("student", p); 你看出问题所在了吗? 你必须检查指针 p 的有效性。

3、不应该尝试为初始化的指针进行 string_copy() 操作。
    定义:char *a = "I am a teacher"; 初始化指针,编译器将字符串,编译在 rdata  区,即初始化区。
    类似如下:
    .rdata
      .LC0 "I am a teacher"
.code
    ...
    movl  dword ptr [ebp - 12h], offset LC0     定义指针 p 并初始化

   结果,因可能越界而破坏 rdata 区 其它变量

4、风格问题使用 while() 循环更紧凑高效。
    如: while ( (*to++ = *from++) != '\0') ;
                      *to = '\0';

论坛徽章:
0
23 [报告]
发表于 2005-07-14 00:23 |只看该作者

string copy problem

其实,想弄懂问题,直接看编译器,编译出来的代码就一目了然。。。。

论坛徽章:
0
24 [报告]
发表于 2005-07-14 09:42 |只看该作者

string copy problem

*a和a[]开始都是指向字符串首地址,都是以'\0'为结束标志

论坛徽章:
0
25 [报告]
发表于 2005-07-14 17:42 |只看该作者

string copy problem

可以改变指针指向的内容,但是不能改变它指向的常量
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP