C语言中memset-memcpy(memmove memccpy)-strcpy函数源代码

来源:互联网 发布:免费优盘数据恢复软件 编辑:程序博客网 时间:2024/04/28 07:40

一、概述

1、memset

原型:extern void *memset(void *buffer, char c, int count);

用法:#include <string.h>

功能:把buffer所指内存区域的前count个字节设置成字符c

说明:返回指向buffer的指针


2、

memcpy

原型:extern void *memcpy(void *dest, void *src, unsigned int count);

用法:#inclue <string.h>

功能:由src所指内存区域复制count个字节到dest所指内存区域

说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针


memccpy

原型:extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int count);

用法:#include <string.h>

功能:由src所指内存区域复制不多于count个字节到dest所指内存区域,如果遇到字符ch则停止复制

说明:返回指向字符ch后的第一个字符的指针,如果src前count个字节中不存在ch则返回NULL。


memmove

原型:extern void *memmove(void *dest, const void *src, unsigned int count)

用法:#include <string.h>

功能:由src所指内存区域复制count个字节到dest所指向内存区域

说明:src和dest所指内存区域可以重叠,但复制后src内容会被更改。函数返回指向dest的指针


memcmp

原型:extern int memcmp(void *buf1, void *buf2, unsigned int count)

用法:#include <string.h>

功能:比较内存区域buf1和buf2的前count个字节

说明:

当buf1<buf2时,返回值<0

当buf1=buf2时,返回值=0

当buf1>buf2时,返回值>0


3、

strset

原型:extern char *strset(char *s, char c)

用法:#include <string.h>

功能:把字符串s中的所有字符都设置成字符c

说明:返回指向s的指针


strcpy

原型:extern char *strcpy(char *dest, char *src)

用法:#include <string.h>

功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

说明:

src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针


strncpy

原型:extern char *strncpy(char *dest, char *src, int n)

用法:#include <string.h>

功能:把src所指由NULL结束的字符串的前n个字节复制到dest所指的数组中。

说明:

如果src的前n个字节不含NULL字符,则结果不会一NULL字符结束。

如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。

src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。


strcmp

原型:extern int strcmp(char *s1, char *s2)

用法:#include <string.h>

功能:比较字符串s1和s2

说明:

当s1<s2时,返回<0

当s1=s2时,返回=0

当s1>s2时,返回>0


strncmp

原型:extern int strcmp(char *s1, char *s2, int n)

用法:#include <string.h>

功能:比较字符串s1和s2的前n个字符

说明:

当s1<s2时,返回值<0

当s1=s2时,返回值=0

当s1>s2时,返回值>0


strlen

原型:extern int strlen(char *s)

用法:#include <string.h>

功能:计算字符串s的长度

说明:返回s的长度,不包括结束符NULL

函数源代码:

//stirng.c==================================================

 

char *strcpy(char *strDes, const char*strSrc)

{

assert((strDes!= NULL) && (strSrc != NULL));

char *address =strDes;

while ((*strDes++ = *strSrc ++) != '\0')

       NULL;

   return address;

}

  

char *strchr_(char *str, int c)

{

   assert(str != NULL);

   while ((*str != (char) c) && (*str != '\0'))

       str ++;

   if (*str != '\0')

       return str;

   return NULL;

}

char *strchr(const char *str, int c)

{

   assert(str != NULL);

   for (; *str != (char) c; ++ str)

       if (*str == '\0')

           return NULL;

   return (char *) str;

}


int strcmp(const char *s, const char *t)

{

assert(s !=NULL && t != NULL);

   while (*s && *t && *s == *t)

    {

       ++ s;

       ++ t;

}

   return (*s - *t);

}

char *strcat(char *strDes, const char*strSrc)

{

   assert((strDes != NULL) && (strSrc != NULL));

   char *address = strDes;

   while (*strDes != '\0')

       ++ strDes;

   while ((*strDes ++ = *strSrc ++) != '\0')

       NULL;

   return address;

}

int strlen(const char *str)

{

   assert(str != NULL);

int len = 0;

 

   while (*str ++ != '\0')

       ++ len;

 

   return len;

}

  

char *strdup(const char *strSrc)

{

   assert(strSrc != NULL);

   int len = 0;

   while (*strSrc ++ != '\0')

       ++ len;

   char *strDes = (char *) malloc (len + 1);

   while ((*strDes ++ = *strSrc ++) != '\0')

       NULL;

   return strDes;

}

 

char *strstr(const char *strSrc, const char*str)

{

   assert(strSrc != NULL && str != NULL);

   const char *s = strSrc;

   const char *t = str;

   for (; *t != '\0'; ++ strSrc)

    {

       for (s = strSrc, t = str; *t != '\0' && *s == *t; ++s, ++t)

           NULL;

       if (*t == '\0')

           return (char *) strSrc;

    }

   return NULL;

}

 

char *strncpy(char *strDes, const char*strSrc, int count)

{

assert(strDes!= NULL && strSrc != NULL);

char *address =strDes;

   while (count -- && *strSrc != '\0')

       *strDes ++ = *strSrc ++;

   return address;

}

 char *strncat(char *strDes, const char*strSrc, int count)

{

   assert((strDes != NULL) && (strSrc != NULL));

   char *address = strDes;

   while (*strDes != '\0')

       ++ strDes;

   while (count -- && *strSrc != '\0' )

       *strDes ++ = *strSrc ++;

   *strDes = '\0';

   return address;

}

 

int strncmp(const char *s, const char *t,int count)

{

assert((s !=NULL) && (t != NULL));

 while (*s && *t && *s == *t && count --)

    {

       ++ s;

       ++ t;

}

 return (*s - *t);

}

 

char *strpbrk(const char *strSrc, constchar *str)

{

   assert((strSrc != NULL) && (str != NULL));

   const char *s;

   while (*strSrc != '\0')

    {

       s = str;

       while (*s != '\0')

       {

           if (*strSrc == *s)

                return (char *) strSrc;

           ++ s;

       }

       ++ strSrc;

    }

   return NULL;

}


int strcspn(const char *strSrc, const char*str)

{

   assert((strSrc != NULL) && (str != NULL));

   const char *s;

   const char *t = strSrc;

   while (*t != '\0')

    {

       s = str;

       while (*s != '\0')

       {

           if (*t == *s)

                return t - strSrc;

           ++ s;

       }

       ++ t;

    }

   return 0;

}

 

int strspn(const char *strSrc, const char*str)

{

   assert((strSrc != NULL) && (str != NULL));

   const char *s;

   const char *t = strSrc;

   while (*t != '\0')

    {

       s = str;

       while (*s != '\0')

       {

           if (*t == *s)

                break;

           ++ s;

       }

       if (*s == '\0')

           return t - strSrc;

       ++ t;

    }

   return 0;

}


char *strrchr(const char *str, int c)

{

   assert(str != NULL);

   const char *s = str;

   while (*s != '\0')

       ++ s;

   for (-- s; *s != (char) c; -- s)

       if (s == str)

           return NULL;

   return (char *) s;

}

 

char* strrev(char *str)

{

   assert(str != NULL);

   char *s = str, *t = str, c;

   while (*t != '\0')

       ++ t;

   for (-- t; s < t; ++ s, -- t)

    {

       c = *s;

       *s = *t;

        *t = c;

    }

   return str;

}

 

char *strnset(char *str, int c, int count)

{

assert(str != NULL);

char *s = str;

for (; *s != '\0' && s - str < count; ++ s)

       *s = (char) c;

   return str;

}

 

char *strset(char *str, int c)

{

  assert(str != NULL);

char *s = str;

 

    for (; *s != '\0'; ++ s)

          *s = (char) c;

 

   return str;

}

 

char *strtok(char *strToken, const char*str)

{

   assert(strToken != NULL && str != NULL);

   char *s = strToken;

   const char *t = str;

   while (*s != '\0')

    {

       t = str;

       while (*t != '\0')

       {

           if (*s == *t)

           {

                *(strToken + (s - strToken)) ='\0';

                return strToken;

           }

           ++ t;

       }

        ++ s;

    }

   return NULL;

}


char *strupr(char *str)

{

   assert(str != NULL);

   char *s = str;

   while (*s != '\0')

    {

       if (*s >= 'a' && *s <= 'z')

           *s -= 0x20;

       s ++;

    }

   return str;

}

 

char *strlwr(char *str)

{

   assert(str != NULL);

   char *s = str;

   while (*s != '\0')

    {

       if (*s >= 'A' && *s <= 'Z')

           *s += 0x20;

       s ++;

    }

   return str;

}


void *memcpy(void *dest, const void *src,int count)

{

   assert((dest != NULL) && (src != NULL));

   void *address =dest;

   while (count --)

    {

       *(char *) dest = *(char *) src;

       dest = (char *) dest + 1;

       src = (char *) src + 1;

   }

   return address;

}

 

void *memccpy(void *dest, const void *src,int c, unsigned int count)

{

   assert((dest !=NULL) && (src != NULL));

   while (count --)

    {

       *(char *) dest = *(char *) src;

       if (* (char *) src == (char) c)

           return ((char *)dest + 1);

       dest = (char *) dest + 1;

       src = (char *) src + 1;

}

   return NULL;

}

 

void *memchr(const void *buf, int c, intcount)

{

   assert(buf != NULL);

   while (count --)

    {

       if (*(char *) buf == c)

           return (void *) buf;

       buf = (char *) buf + 1;

    }

   return NULL;

}


int memcmp(const void *s, const void *t,int count)

{

   assert((s !=NULL) && (t != NULL));

   while (*(char *) s && *(char *) t && *(char *) s ==*(char *) t && count --)

    {

       s = (char *) s + 1;

       t = (char *) t + 1;

    }

   return (*(char *) s - *(char *) t);

}

 

void *memmove(void *dest, const void *src,int count)

{

   assert(dest != NULL && src != NULL);

   void *address =dest;

   while (count --)

    {

       *(char *) dest = *(char *) src;

       dest = (char *) dest + 1;

       src = (const char *)src + 1;

   }

   return address;

}

 

void *memset(void *str, int c, int count)

{

   assert(str != NULL);

   void *s = str;

   while (count --)

    {

       *(char *) s = (char) c;

       s = (char *) s + 1;

}

   return str;

}

0 0
原创粉丝点击