免费注册 查看新帖 |

Chinaunix

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

自己作的gbios string库 [复制链接]

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


   各位大虾,小弟自己写了个g-bios string库。
   俺的一点心得:
   (1)标准string库是不会检查传入的指针的,所以使用string库时程序员要注意检查
    指针的正确性;
  (2)strncpy,当目标字串的容量大于n+目标字串长度时,会在余下的位置上补‘\0’    ;
  (3)memcmp,在比较时,返回的值是int而不是long;
  (4)strchr、strrchr 传递要查找的字符时,用的数据类型是int而不是char
   (5)memmove 、memcpy都可以实现内存块的拷贝,不同点在于当(源地址+n)>目标地址时memmove会拷贝仍然可以正确完成拷贝,而memcpy,则会发生内存覆盖

扩展的string库还在努力中,o(∩_∩)o...哈哈
~                                                                              
~                                                                              
~

usr_string.tar

20 KB, 下载次数: 34

论坛徽章:
0
2 [报告]
发表于 2009-11-30 21:24 |只看该作者
关于g-bios标准库中的string库函数strrchr函数的实现,我有点疑问。
strrchr函数原型:char *strrchr(const char *psrc, size_t c);
其功能,我的理解是返回源字符串最后一个首字符与变量c匹配的字串。
我的思路是定义一个指针变量记录首字符匹配的位置,形参指针变量遍历整个源字符串,当源字符串遍历完了,定义的指针变量刚好记录了最后一个首字符匹配的地址,于是自己写了一个strrchr函数如下:
char *strrchr(const char *psrc, size_t c)
{
        const char *p = NULL;   
       
        while (*psrc)
        {
                if(*psrc == c)
                {
                        p = psrc;
                }
               
                psrc++;               
        }
       
        if(p == NULL)
        {       
                return NULL;
        }
        else
        {
                return (char *)p;
        }
}
但是看了标准库strrchr函数的实现,发现strrchr函数是先遍历完源字符串,在倒着遍历找出最后那个匹配字串,我有个疑问就是如果源字符串第一个字符就是最后那个首字符与字符c,那不是来回遍历了两次,这样的话,效率上是不是有些问题。自己写的函数,遍历源字符串一次就可以了,但为什么标准库会采取这种方式实现呢,我想标准库这样实现一定是有它的道理的,经讨论,我觉得我的函数实现中当源字符串中与c匹配的字符很多的时候,我那个函数记录首字符位置的指针变量被反复赋值,导致效率上也会出现问题,也许是我的理解有误,希望高手能指点迷津!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP