22

我已经阅读了函数标题,但我仍然不确定在用例方面到底有什么区别。

4

6 回答 6

48

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

例子:

memset(str, '*', 50);   

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

memcpy(str2, str1, 50); 

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

于 2009-10-08T06:51:26.277 回答
15

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|
* +-+-+-+-+
*/
于 2009-10-08T06:50:34.720 回答
3

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

memcpy也许您会对和之间的区别感兴趣memmove。两者都做同样的事情,但即使源和目标重叠,后者也能工作。

于 2009-10-08T06:51:26.537 回答
3

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

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

于 2009-10-08T06:53:21.953 回答
1

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

于 2015-12-01T09:46:37.680 回答
0

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

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

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

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

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

于 2015-12-01T09:42:43.217 回答