动手写C库——strcmp()

来源:互联网 发布:下载软件管家12345 编辑:程序博客网 时间:2024/04/28 01:09

计划通过编写C语言常见的库函数练习C语言基本功。

 每写一个函数都包括三个过程:

1. 通过Linux man命令查看库函数的描述,重点是入参和返回值;

2. 自己不参考任何内容实现库函数的功能;

3. 对比glibc里库函数的实现,做总结;

1. strcmp()形式如下:    int strcmp(const char *s1, const char *s2)

2. 我的实现:

/*1. 从左往右依次比较每个字符,如果相等继续比较下一个字符,如果不等立刻返回 s1的字符减去s2的字符2. 以s1出现字符串结束符为循环退出条件*/int strcmp7(const char *s1, const char *s2){//需要判断字符串结束符,否则指针加加会越界while (*s1 != '\0'){if (*s1 == *s2){s1++;s2++;}else{return (*s1 - *s2);}}return (*s1 - *s2);}
3. glibc的实现:
intSTRCMP (const char *p1, const char *p2){  const unsigned char *s1 = (const unsigned char *) p1;  const unsigned char *s2 = (const unsigned char *) p2;  unsigned char c1, c2;  do    {      c1 = (unsigned char) *s1++;      c2 = (unsigned char) *s2++;      if (c1 == '\0')return c1 - c2;    }  while (c1 == c2);  return c1 - c2;}

我认为两个函数只是循环退出的条件不同,其他地方没有实质性的区别。两个函数都做了初步测试,没发现问题。

0 0
原创粉丝点击