首页 > 其他 > 详细

字符串相关函数的实现

时间:2014-03-20 03:20:17      阅读:479      评论:0      收藏:0      [点我收藏+]

strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。

已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

void *memcpy( void *dest, const void *src, size_t count );

 

bubuko.com,布布扣
char * strcpy(char * dest, const char * src) // 实现src到dest的复制
{
  if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性
  {
 
      return NULL;
  }
  char *strdest = dest;        //保存目标字符串的首地址
  while ((*strDest++ = *strSrc++)!=\0); //把src字符串的内容复制到dest下
  return strdest;
}
void *memcpy(void *memTo, const void *memFrom, size_t size)
{
  if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效
         return NULL;
  char *tempFrom = (char *)memFrom;             //保存memFrom首地址
  char *tempTo = (char *)memTo;                  //保存memTo首地址      
  while(size -- > 0)                //循环size次,复制memFrom的值到memTo中
         *tempTo++ = *tempFrom++ ;  
  return memTo;
}
bubuko.com,布布扣

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

bubuko.com,布布扣
void* memset(void* buf,int c,size_t count) 
{ 
    if(buf == NULL)
        return  NULL; 

     char* pvTo = (char*)buf; 

    while (count-- >0) 
    { 
        *pvTo++ = (char)c; 
    } 

    return buf; 
}
bubuko.com,布布扣
bubuko.com,布布扣
int strcmp(char * src,char *dest)
{
if( src == NULL || dest == NULL )
return ERROR;
while ( *src != \0 && *dest != \0 && *src == *dest ) { src++; dest++; } if( (*src - *dest) > 0 ) return 1; else if ( (*src - *dest) < 0) return -1; else return 0; }
bubuko.com,布布扣
bubuko.com,布布扣
char *strcat(char *s1,const char *s2)
{
    if ( s1 == NULL || s2 == NULL )
            return NULL;

    char *address=s1;
    while(*s1++);
    s1--;

    while(*s1++=*s2++); 
   
    return address;
}        
bubuko.com,布布扣
bubuko.com,布布扣
int atio (char *s)
{
if ( s == NULL )
return ERROR;
int sign=1,num=0; if(*s==-) sign=-1; s++; while((*s)!=\0) { num=num*10+(*s-0); s++; } return num*sign; }
bubuko.com,布布扣
bubuko.com,布布扣
//num : 欲转换的数值 
//des : 目标字符串的地址
//radix : 转换后的进制数,可以是10进制、16进制等
// 暂未考虑负数的转化成字符串
char *itoa(int num, char *des, int radix)
{
if ( NULL == des )
return NULL;
const char string[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char* ptr = des;
int j = 0; while (num) { *ptr++ = string[num % radix]; num /= radix; if (num < radix) { *ptr++ = string[num]; *ptr = \0; break; } } j = ptr - des - 1; for (int i = 0; i < (ptr - des) / 2; i++) { int temp = des[i]; des[i] = des[j]; des[j--] = temp; } return des; }
bubuko.com,布布扣

字符串相关函数的实现,布布扣,bubuko.com

字符串相关函数的实现

原文:http://www.cnblogs.com/theCambrian/p/3612377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!