部分GNU代码片 18、字符串操作

原创 2008年04月22日 21:00:00


size_t strlcat(
        register char* s, register const char* t, register size_t n)
{
    const char* o = t;
   
    if (n)
    {
        while (--n && *s)
            s++;
        if (n)
            do
            {
//                if (!--n)  //这里是http://www.google.com/codesearch?hl=zh-CN&q=+strlcat+show:KiQJipp-bKc:-XhE0e2favM:qI68VRkNHVY&sa=N&cd=4&ct=rc&cs_p=http://gentoo.osuosl.org/distfiles/ast-ksh.2006-02-14.tgz&cs_f=src/lib/libast/string/strlcat.c#first给出的代码,感觉有问题,现在更正如下
                if (!n--)
                {
                    *s = 0;
                    break;
                }
            } while (*s++ = *t++);
        else
            *s = 0;
    }

//更不大明白这一段代码是搞什么的,很郁闷,他根本就没有意义
//    if (!n)
//        while (*t++)
//            ;
//    return t - o - 1;

    //下面是返回还剩余多少字符没能cat上

    if ((unsigned int )-1 == n)
    {
        o = t;
        while (*t++)
            ;
        return t-o-1;
    }
    return 0;

//    return t-o;//这个用来返回已经cat的长度
}


#define DEBUG_ME
#define  HAVE_CLOCK_GETTIME
extern double time_cost(void);
int main()
{
   
    char zA[7]="1234";
    char zB[5]="456";
   
    char zC[1024]="";
    char zD[1000]="123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
    cout <<endl;
   
    cout << strlcat(zA, zB, sizeof(zA)) <<endl;
   
    cout << zA <<endl;
   
#ifdef  DEBUG_ME
                double tCost = time_cost();
#endif    
               
     for(int i=0;i<10000;i++) 
     {
         strlcat(zC, zD, sizeof(zC));
         *(zC+400) = 0;
     }
   
#ifdef  DEBUG_ME
                tCost = time_cost() - tCost;
                printf("Time: %lf seconds/n", tCost);
#endif    

}

 

Time: 0.075000 seconds这是做10000次的cat的耗时。

 time_cost函数参考前文

 

相关文章推荐

汇编总结-第三部分_2_GNU下优化代码

通常汇编写的代码具有非常好的速度。但是难懂,所以人们就选择先编译高级语言,然后再修改汇编代码来达到优化目的。但实际上想要写的比编译器好是需要很多的练习的。对于我们这些普通的汇编使用者,就了解点简单的技...
  • meiboyu
  • meiboyu
  • 2014年01月10日 14:19
  • 570

(18)C风格字符串与旧代码的接口

字符串字面值是一种通用结构的实例,这种结构即是C++由C继承而来的C风格字符串。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯书写的字符串存放在字符数组中并以空...

阅读笔记:《C#字符串和正则表达式参考手册》 1-4章部分代码

#region P8:判断字符是标点、空白字符?             /*              string band = "The band";             Consol...

jQuery截取指定长度字符串超出部分省略代码

获取div中的文本长度,然后和属性limit规定的长度进行对比,如果超出长度则用截取指定的长度,超出长度的部分用…替代。       jQuery字符串截取                ...

字符串部分操作的函数实现

#include using namespace std; /* 求sub字符串在src中匹配的位置,匹配失败返回-1 */ int findStr(const char*src,co...

c库函数 strring.h字符串操作(部分常用实现)

作为C程序员来说 1.size_t strlen( char const * string);

C#代码模式(数据库操作部分)

  • 2013年09月24日 06:55
  • 30KB
  • 下载

zookeeper 操作代码 部分可用,

  • 2017年07月27日 11:48
  • 1.91MB
  • 下载

GNU/Linux上程序的国际化和本地化(I18N & I10N)

[目录] 0. forward 1. i18n and l10n introduction 2. gettext and intltool introduction 3. bu...

solr简单应用操作的代码部分

  • 2014年05月08日 16:41
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:部分GNU代码片 18、字符串操作
举报原因:
原因补充:

(最多只允许输入30个字)