各种库函数的实现

来源:互联网 发布:软件架构设计过程 编辑:程序博客网 时间:2024/06/10 06:26

http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html

strcpy和memcpy的区别

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

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

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

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


int atoiTest(char s[])
{
    int i=0,sum=0,sign;
    while(' '==s[i]||'\t'==s[i])
    {
        i++;
    }
    sign=('-'==s[i])?-1:1;
    if('-'==s[i]||'+'==s[i])
        i++;
    while(s[i]!='\0')
    {
        sum=s[i]-'0'+sum*10;
        i++;
    }
    return sign*sum;
}

void itoaTest(int num,char str[])
{
    int sign=num,i=0,j=0;
    char temp[11];
    if(sign<0)
    {
        num=-num;
    }
    do
    {
        temp[i]=num%10+'0';
        num/=10;
        i++;
    }while(num>0);
    if(sign<0)
    {
        temp[i++]='-';
    }
    temp[i]='\0';
    i--;
    while(i>=0)
    {
        str[j]=temp[i];
        j++;
        i--;
    }
    str[j]='\0';

}


int strcmpG(char* str,char* str1)
{
    assert(str!=NULL&&str1!=NULL);
    int i=0,j=0;
    while(*str&&*str1&&*str==*str1)
    {
        str++;
        str1++;
    }
    if(((*str)-(*str1))==0)
    {
        return 0;
    }
    else if(((*str)-(*str1))<0)
        return -1;
    else
        return 1;
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一脚刹车踩到底怎么办 p53基因型cc型该怎么办 人不小心掉进火山怎么办 奥林巴斯相机相片被锁了怎么办 文明53格外的奢侈品怎么办 答应了要请客钱不够怎么办 在家里面着急没办法干活怎么办 1岁宝宝脾气暴躁怎么办 档案不在中国海峡人才市场怎么办 海丰西中街吃鸡钱包给拿了怎么办? 朝鲜成为经济强国中国怎么办 窗户上有哈气水怎么办 阳台下水管声音好大怎么办 一开水龙头会响怎么办 海里遇到暗流怎么办贴吧 东海通忘记客户号怎么办 证券客户号忘了怎么办 热收缩机有空气怎么办 韩国国籍签证到期想回国怎么办 休闲裤裤脚长了怎么办 电大本科统考考不过怎么办 一案涉及两个法律关系怎么办 法院调解书被告不执行怎么办 电视cas授权已过期怎么办 网贷逾期被仲裁怎么办 word所选内容无效怎么办 wps批注不显示了怎么办 船舶挂靠船务公司去要怎么办 被螃蟹扎了肿了怎么办 手指被海鲜刺了怎么办 被海鲜刺进去了怎么办 手被海鲜扎了怎么办 环评设备写错了怎么办 物业对高空抛物怎么办 如果法官不公平判案我该怎么办? 民事案夸省审理案件不公平怎么办 积目头像未通过审核怎么办 电压不稳空调带不动怎么办 孩子吃了塑料珠怎么办 美的电压力锅打不开盖子怎么办 瓶盖打不开怎么办 瓶子是玻璃的