首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于srcpy [已结贴,结贴人:canny1543]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • canny1543
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-03-30 13:19:29 楼主
    char *srcpy(char *strDest,const char *strSrc)
    {
    if ( strDest == NULL || strSrc == NULL)
    return NULL ;
    if ( strDest == strSrc)
    return strDest ;
    char *tempptr = strDest ;
    while(*strSrc!='\0')
    {
    *strDest++ = *strSrc++;
    }
    return tempptr ;
    }
    我把while(*strSrc!='\0')
    {
    *strDest++ = *strSrc++;
    }
    注释掉以后,监视tempptr 变量和没有注释一样啊,不加上这个while语句可以吗?或者说加和不加有什么区别吗?
    请详细解释一下:指针变量存放的是一个地址,那么怎样通过其存放的地址知道它对应的是什麽呢?
    比如:char * pstr="HELLO WORLD!";
    比如pstr中存放的地址是:0x0013ff6c,而0x0013ff6c中存放的是"H"
    那怎么知道pstr指向的是"HELLO WORLD!"而不是"H"呢?是不是编译生成的符号表中已经标记了呢,请高手指教,多谢!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ttkk_2007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-30 13:35:051楼 得分:0
    不加while怎么实现拷贝
    监视tempptr 变量和没有注释一样啊,这句话什么意思?

    比如:char * pstr="HELLO WORLD!";
    比如pstr中存放的地址是:0x0013ff6c,而0x0013ff6c中存放的是"H"
    那怎么知道pstr指向的是"HELLO WORLD!"而不是"H"呢?是不是编译生成的符号表中已经标记了呢,请高手指教,多谢!

    ==================================================
    因为是char*,所以他回去找字符串结束符'\0',从他指向的开始到结束符之前就是他的内容
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • canny1543
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-30 13:48:382楼 得分:0
    谢谢你,你说的很好,我好像明白了
    但是,我刚才把那个While语句注释掉以后
    char * strTestStrSource="Hello World";
    pstr=strcpy(str, strTestStrSource);
    发现pstr变量的value栏里面是"0x0013ff6c "Hello World""
    没有注释掉while语句的时候也是这个东西,为什么会是一样的呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jennyvenus
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      5

      5

    发表于:2008-03-30 13:53:083楼 得分:4
    你写的程序正好写反了,一个逻辑上更合理的写法应该是

    C/C++ code
    char *srcpy(char *strDest,const char *strSrc) { if ( strDest == NULL || strSrc == NULL) return NULL ; if ( strDest == strSrc) return strDest ; char *tempptr = strDest ; while(*strSrc!='\0') { *strDest++ = *tempptr++; } return strDest ; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ttkk_2007
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-30 13:54:214楼 得分:16
    注意你调用的是strcpy,调用的string.h里面的strcpy
    而你的函数是srcpy
    不一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • canny1543
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-30 14:03:165楼 得分:0
    哦,我知道了,非常感谢啊!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved