strcpy,strcat,memcpy和memmove的实现

来源:互联网 发布:初级网络优化工程师 编辑:程序博客网 时间:2024/05/22 12:48
#include<stdio.h>
#include<assert.h>
#include<string.h>
char *MyStrcpy(char *des,const char *src)
{
assert(des != NULL && src != NULL);
char *pstr = des;
while((*pstr++ = *src++)!= '\0');
return des;
}

char *MyStrcat(char *des,const char *src)
{
assert(des != NULL && src!= NULL);
char *pdes = des;
while(*pdes != '\0') ++pdes;
while((*pdes++ = *src++) != '\0');
return des;
}

void *MyMemcpy(void *des,const void *src,unsigned int count)
{
assert(des !=NULL && src != NULL && count>0);
char *pdes = (char *)des;
int i=0;
while(i<count && *(char *)src != '\0')
{
*pdes++=*(char *)src;
src=(char *)src+1;
++i;
}
*pdes = *(char*)src;
return des;
}

void* MyMemmove(void *des,const void *src,unsigned int count)
{
assert(des != NULL && src != NULL && count >0);
char *pdes = (char *)des;
if(des < src || (char *)des >(char *)src + count)
{
int i = 0;
while(i<count && *(char *)src != '\0')
{
*pdes++ = *(char *)src;
src = (char *)src+1;
++i;
}
}
else
{
pdes = pdes + count;
src = (char *)src + count -1;
*pdes-- = '\0';
int i= count -1;
while(i>=0)
{
*pdes--=*(char *)src;
i--;
src = (char *)src -1 ;
}
}
return des;
}

int main()
{
char des[] = "fad";
char src[] = "afs4";
printf("source string:%s des string:%s\n",src,des);
char *newdes = MyStrcpy(des,src);
printf("strcpy result :%s\n",newdes);
printf("strcat result:%s\n",MyStrcat(des,"dse"));
printf("memcpy result:%s\n",MyMemcpy(des,"src",sizeof(char)*strlen("src")));
printf("memmove result:%s\n",(char *)(MyMemmove(des,"src",sizeof(char)*strlen("src"))));
return 0;

}


运行结果:


0 0
原创粉丝点击