C中的memset和memcpy有什么区别

时间:2009-10-08 06:47:19

标签: c memcpy memset

我已阅读过函数标题,但我仍然不确定用例方面的差异究竟是什么。

6 个答案:

答案 0 :(得分:39)

memcpy()从一个地方复制到另一个地方。 memset()只是将所有内存设置为相同的值。

示例:

memset(str, '*', 50);   

上面的行将字符串str的前50个字符设置为*(或memset的任何第二个参数)。

memcpy(str2, str1, 50); 

上面一行将str1的前50个字符复制到str2。

答案 1 :(得分:16)

memset()将指定缓冲区中的所有字节设置为相同的值,memcpy()将一个字节序列从另一个位置复制到缓冲区。

char a[4];
memset(a, 7, sizeof(char)*4);
/*
* a is now...
*
* +-+-+-+-+
* |7|7|7|7|
* +-+-+-+-+
*/

char b[] = {1,2,3,4};
char c[4];
memcpy(c, b, sizeof(char)*4);
/*
* c is now...
*
* +-+-+-+-+
* |1|2|3|4|
* +-+-+-+-+
*/

答案 2 :(得分:3)

memset将内存块设置为单个值。 memcpy将块的内容复制到另一个块中。

也许您对memcpymemmove之间的区别感兴趣。两者都做同样的事情,但即使源和目的地重叠,后者仍然有效。

答案 3 :(得分:2)

memset()用于将内存块中的所有字节设置为特定的char值。 Memset也只能与char一起使用,因为它是它的初始化值。

memcpy()在内存之间复制字节。这种类型的数据被复制是无关紧要的,它只是逐字节复制。

答案 4 :(得分:0)

memcpy()从一个地方复制到另一个地方。 memset()只是将所有内存设置为相同。

例如,这里将字符串str的字符串长度设置为*(或memset的任何第二个参数)。

memset(str, '*', strlen(str)+1);   

这里将字符串src的字符串长度复制到dest。

memcpy(dest, src, strlen(src)+1);

答案 5 :(得分:0)

memset使用常量字节填充内存

void * memset(void * s,int c,size_t n);

使用memset是程序员可以直接用特定的内存填充。 和memcpy使用常量 void指针指向无法更改的源。

memcpy复制内存区域

void * memcpy(void * dest,const void * src,size_t n);

参考memcpy           memset