您的位置:首页 > 其它

strcpy,memcpy,memset区别

2014-04-02 16:03 232 查看
strcpy原型实现:

char *my_strcpy(char *dst,const char *src)

{

assert(dst != NULL);

assert(src != NULL);

char *ret = dst;

while((* dst++ = * src++) != '\0')

;

return ret;

}

memcpy原型实现:

void *memcpy1(void *desc,const void * src,size_t size)

{

if((desc == NULL) && (src == NULL))

{

return NULL;

}

unsigned char *desc1 = (unsigned char*)desc;

unsigned char *src1 = (unsigned char*)src;

while(size-- >0)

{

*desc1 = *src1;

desc1++;

src1++;

}

return desc;

}

strcpy和memcpy功能上也有些差别:

比如:

const char *str1="abc/0def";

char str2[7];

首先用strcpy实现:

strcpy(str2,str1)

得到结果:str2="abc";也就是说,strcpy是以'/0'为结束标志的。

再用memcpy实现:

memset(str2,7);

memcpy(str2,str1,7);

得到结果:str2="abc/0def";

也就是说,memcpy是对内存区域的复制。当然,不仅能够复制字符串数组,而且能够复制整型数组等其他数组。

memset

原型:extern void *memset(void *buffer, int c, int count);

用法:#include <string.h>

功能:把buffer所指内存区域的前count个字节设置成字符c。

说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符。

举例:char a[100];memset(a, '/0', sizeof(a));

memset可以方便的清空一个结构类型的变量或数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: