strcpy,strncpy;strcat,strncat;memcpy,memncpy;

来源:互联网 发布:结构方程模型软件 编辑:程序博客网 时间:2024/05/18 02:33

 

  strcat(str1,str2):1)str1必须足够大;2)str1原来的'\0'被取消,只保留str2的'\0',也就是str2从str1的'\0'位置开始占用;

  哎,懒得写了,直接上源码了,我想说的再多,不如真真切切的看到其实现方式实在... ...呵呵.. ...

//linux2.6.10中源码

char * strcpy(char * dest,const char *src)
{
 char *tmp = dest;

 while ((*dest++ = *src++) != '\0')
  /* nothing */;
 return tmp;
}

 可以看出,是将src中的'\0'一起拷贝了的.

char * strncpy(char * dest,const char *src,size_t count)
{
 char *tmp = dest;

 while (count) {
  if ((*tmp = *src) != 0) src++;
  tmp++;
  count--;
 }
 return dest;
}

 

size_t strlcpy(char *dest, const char *src, size_t size)
{
 size_t ret = strlen(src);

 if (size) {
  size_t len = (ret >= size) ? size-1 : ret;
  memcpy(dest, src, len);
  dest[len] = '\0';
 }
 return ret;
}

 

char * strcat(char * dest, const char * src)
{
 char *tmp = dest;

 while (*dest)
  dest++;
 while ((*dest++ = *src++) != '\0')
  ;

 return tmp;
}

 

char * strncat(char *dest, const char *src, size_t count)
{
 char *tmp = dest;

 if (count) {
  while (*dest)
   dest++;
  while ((*dest++ = *src++) != 0) {
   if (--count == 0) {
    *dest = '\0';
    break;
   }
  }
 }

 return tmp;
}

 

size_t strlcat(char *dest, const char *src, size_t count)
{
 size_t dsize = strlen(dest);
 size_t len = strlen(src);
 size_t res = dsize + len;

 /* This would be a bug */
 BUG_ON(dsize >= count);

 dest += dsize;
 count -= dsize;
 if (len >= count)
  len = count-1;
 memcpy(dest, src, len);
 dest[len] = 0;
 return res;
}

int strcmp(const char * cs,const char * ct)
{
 register signed char __res;

 while (1) {
  if ((__res = *cs - *ct++) != 0 || !*cs++)
   break;
 }

 return __res;
}

 

int strncmp(const char * cs,const char * ct,size_t count)
{
 register signed char __res = 0;

 while (count) {
  if ((__res = *cs - *ct++) != 0 || !*cs++)
   break;
  count--;
 }

 return __res;
}

 

void * memcpy(void * dest,const void *src,size_t count)
{
 char *tmp = (char *) dest, *s = (char *) src;

 while (count--)
  *tmp++ = *s++;

 return dest;
}

 

void * memmove(void * dest,const void *src,size_t count)
{
 char *tmp, *s;

 if (dest <= src) {
  tmp = (char *) dest;
  s = (char *) src;
  while (count--)
   *tmp++ = *s++;
  }
 else {
  tmp = (char *) dest + count;
  s = (char *) src + count;
  while (count--)
   *--tmp = *--s;
  }

 return dest;
}

 

 

原创粉丝点击