//在C中 #include<string.h> //在C++中 #include<cstring>
void*__cdeclmemcpy(void* dst,constvoid* src,size_tcount)
{
void* ret = dst;
while(count--)
{
// 注意, memcpy函数没有处理dst和src区域是否重叠的问题
*(char*)dst = *(char*)src;
dst = (char*)dst +1;
src = (char*)src +1;
}
return(ret);
}
void*__cdeclmemcpy(void* dst,constvoid* src,size_tcount)
{
char*pDst =static_cast<char*> dst;
constchar*pSrc =static_cast<constchar*> src;
//检查参数
if(pDst==NULL|| pSrc==NULL|| count <=0){
returnNULL;
}
//判断有是否存在重叠部分
if(pDst > pSrc && pDst < pSrc + count){
for(size_ti=count-1; i>=0; i--)
{
pDest[i] = pSrc[i];
}
}
else{
for(size_ti=0; i<count; i++)
{
pDest[i] = pSrc[i];
}
}
returnpDst;
}
voidmemset(void*s,intc,size_tn)
{
constunsignedcharuc = c;//将int转换成char,截去c的高24位,留下低8位
unsignedchar*su;
for(su = s;0< n; ++su, --n)
*su = uc;
returns;
}
intnum[10]; memset(num,1,sizeof(int)*10);
void*memmove(void* dest,void* src,size_tcount)
{
void* ret = dest;
if(dest <= src || dest >= (src + count))
{
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while(count --)
*dest++ = *src++;
}
else
{
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
src += count - 1;
while(count--)
*dest-- = *src--;
}
returnret;
}
#include<string.h> #include<stdio.h>
char*strcpy(char* dst ,char* src){
if(dst==NULL||src==NULL)returnNULL;// --1
if(dst==src)returndst;//--2
char* address = dst;//--3
while((*dst++ = *src++)!='\0')//--4
returnaddress;//--5
}
//第一种
while(*dst++ = *src++)//直接越界访问,没有检查指针的有效性
//第二种
while(*src!='\0'){*dst++ = *src++;}//考虑了src的边界问题,没有在dst的后面加'\0',会导致dst的长度未知引起错误
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有