• string函数库的原型


     1 #ifndef __HAVE_ARCH_STRCPY
     2 /**
     3  * strcpy - Copy a %NUL terminated string
     4  * @dest: Where to copy the string to
     5  * @src: Where to copy the string from
     6  */
     7 char *strcpy(char *dest, const char *src)
     8 {
     9         char *tmp = dest;
    10 
    11         while ((*dest++ = *src++) != '')
    12                 /* nothing */;
    13         return tmp;
    14 }
    char *strcpy
     1 /**
     2  * memcpy - Copy one area of memory to another
     3  * @dest: Where to copy to
     4  * @src: Where to copy from
     5  * @count: The size of the area.
     6  *
     7  * You should not use this function to access IO space, use memcpy_toio()
     8  * or memcpy_fromio() instead.
     9  */
    10 void *memcpy(void *dest, const void *src, size_t count)
    11 {
    12         char *tmp = dest;
    13         const char *s = src;
    14 
    15         while (count--)
    16                 *tmp++ = *s++;
    17         return dest;
    18 }
    void *memcpy

     strcpy和memcpy主要有以下3方面的区别。
    1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
    2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符""才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
    3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

     1 #ifndef __HAVE_ARCH_STRCMP
     2 /**
     3  * strcmp - Compare two strings
     4  * @cs: One string
     5  * @ct: Another string
     6  */
     7 
     8 int strcmp(const char *cs, const char *ct)
     9 {
    10         unsigned char c1, c2;
    11 
    12         while (1) {
    13                 c1 = *cs++;
    14                 c2 = *ct++;
    15                 if (c1 != c2)
    16                         return c1 < c2 ? -1 : 1;
    17                 if (!c1)
    18                         break;
    19         }
    20         return 0;
    21 }
    int strcmp
     1 /**
     2  * strncmp - Compare two length-limited strings
     3  * @cs: One string
     4  * @ct: Another string
     5  * @count: The maximum number of bytes to compare
     6  */
     7 int strncmp(const char *cs, const char *ct, size_t count)
     8 {
     9         unsigned char c1, c2;
    10 
    11         while (count) {
    12                 c1 = *cs++;
    13                 c2 = *ct++;
    14                 if (c1 != c2)
    15                         return c1 < c2 ? -1 : 1;
    16                 if (!c1)
    17                         break;
    18                 count--;
    19         }
    20         return 0;
    21 }
    int strncmp
     1 /**
     2  * strlen - Find the length of a string
     3  * @s: The string to be sized
     4  */
     5 size_t strlen(const char *s)
     6 {
     7         const char *sc;
     8 
     9         for (sc = s; *sc != ''; ++sc)
    10                 /* nothing */;
    11         return sc - s;
    12 }
    size_t strlen
     1 /**
     2  * memset - Fill a region of memory with the given value
     3  * @s: Pointer to the start of the area.
     4  * @c: The byte to fill the area with
     5  * @count: The size of the area.
     6  *
     7  * Do not use memset() to access IO space, use memset_io() instead.
     8  */
     9 void *memset(void *s, int c, size_t count)
    10 {
    11         char *xs = s;
    12 
    13         while (count--)
    14                 *xs++ = c;
    15         return s;
    16 }
    void *memset
     1 /**
     2  * memmove - Copy one area of memory to another
     3  * @dest: Where to copy to
     4  * @src: Where to copy from
     5  * @count: The size of the area.
     6  *
     7  * Unlike memcpy(), memmove() copes with overlapping areas.
     8  */
     9 void *memmove(void *dest, const void *src, size_t count)
    10 {
    11         char *tmp;
    12         const char *s;
    13 
    14         if (dest <= src) {
    15                 tmp = dest;
    16                 s = src;
    17                 while (count--)
    18                         *tmp++ = *s++;
    19         } else {
    20                 tmp = dest;
    21                 tmp += count;
    22                 s = src;
    23                 s += count;
    24                 while (count--)
    25                         *--tmp = *--s;
    26         }
    27         return dest;
    28 }
    void *memmove
     1 /**
     2  * memcmp - Compare two areas of memory
     3  * @cs: One area of memory
     4  * @ct: Another area of memory
     5  * @count: The size of the area.
     6  */
     7 int memcmp(const void *cs, const void *ct, size_t count)
     8 {
     9         const unsigned char *su1, *su2;
    10         int res = 0;
    11 
    12         for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
    13                 if ((res = *su1 - *su2) != 0)
    14                         break;
    15         return res;
    16 }
    int memcmp
  • 相关阅读:
    打包python脚本为exe可执行文件-pyinstaller和cx_freeze示例
    2011年-CUshell编程大赛
    【Java菜鸟学习总结】Java基础知识(类)
    【Java菜鸟学习总结】Java基础(关键字、数据类型、运算符、流程控制)
    【Java菜鸟学习总结】Java 后端开发学习路线
    【opencv_python学习之三】图像处理(一)更改色彩模式
    【opencv_python学习之二.五】如何查看opencv_python的函数说明
    【cocos2d-x 学习(一)】【转】Cocos2d-x 3.X Qt MinGW版本编译运行
    mfc导出dll(一)
    【opencv_python学习之二】图像处理初识
  • 原文地址:https://www.cnblogs.com/jason-linux/p/10603945.html
Copyright © 2020-2023  润新知