首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

memcpy,strcpy,memset的函数实现


/**********************************************************
公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)各种情况包括:1、参数是指针,检查指针是否有效2、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出3、读写权限检查4、安全检查,是否会溢出**********************************************************/
/* 功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。*/
void memcpy(void* dest, void* src, int count)
{
char* pbTo = (char*)dest;
char* pbFrom = (char*)src;
assert(dest != NULL && src != NULL); //检查输入指针的有效性
assert(pbTo>=pbFrom+count pbFrom>=pbTo+count);//检查两个指针指向的内存是否重叠
while(count-->0) { *pbTo++ = *pbFrom++; }
return;}

/* 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。 说明:src和dest所指
内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。*/
char* strcpy(char* dest, const char* src)
{
assert(dest != NULL && src != NULL);
char* address=dest;
while((*dest++=*src++) != '\0')
{}
return address;}
/* 功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。*/
void* memset(void* buffer, int c, int count)
{
char* pvTo=(char*)buffer;
assert(buffer != NULL);
while(count-->0)
{ *pvTo++=(char)c; }
return buffer;}

[wangjy17908]
添加时间:2008-09-09
版权所有(C)2005-2015