我已阅读过函数标题,但我仍然不确定用例方面的差异究竟是什么。
答案 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
将块的内容复制到另一个块中。
也许您对memcpy
和memmove
之间的区别感兴趣。两者都做同样的事情,但即使源和目的地重叠,后者仍然有效。
答案 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)