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;
#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
- strcpy,strcat,memcpy和memmove的实现
- 几个常用函数的实现strcpy,memcpy,memmove,strcat,strcmp
- strcpy,strcmp,strstr,strcat,memcpy,memmove的模拟实现
- 用c语言.模拟实现strcpy,strcat,strcat,memcpy,memmove
- strcpy/memcpy/memmove的实现
- strcpy/memcpy/memmove的实现
- 模拟实现strstr,strcpy,strlen,strcat,strcmp,memcpy,memmove
- 模拟实现: strstr strcpy strlen strcat strcmp memcpy memmove
- 模拟实现strcpy,strncpy,strcat,strncat,strcmp,strncmp,memcpy,memmove
- 模拟实现strlen,strcpy,strcat,strcmp,strstr,memcpy,memmove
- 模拟实现strcpy ,strstr,strcat,strcmp,memcpy,memmove
- 模拟实现strcpy、strcat、strstr、strchr、strcmp、memcpy、memmove
- memcpy,memmove,strcpy,strcat等系列函数的实现(一)
- memcpy,memmove,strcpy,strcat等系列函数的实现(二)
- 字符串函数的原型实现(strcpy, strcat, strcmp, memset, memcpy, memmove)
- 常用的字符处理函数实现:strstr strcpy strcat memcpy memmove
- memcmp,memcpy,memmove,memset,strcat,strcmp,strcpy,strlen 8个函数的实现
- 【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
- java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法
- CentOS VNCServer安装
- 斜线表头
- YAHOO 35条前端优化建议
- 一个字符串常量实验引发的思考
- strcpy,strcat,memcpy和memmove的实现
- 经纬度合法性判断
- iOS开发--Kiwi使用进阶 Mock, Stub, 参数捕获和异步测试
- CNN一些知识点
- 在Centos 中将zookeeper设置成开机启动
- 872 开会【排列组合】
- 快速排序
- Visual Studio插件Visual AssistX的使用
- jquery中 css样式操作