您的位置:首页 > 其它

memcpy,strcpy,memset的函数实现

2014-07-03 17:04 357 查看
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;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: