memset和memcpy的区别目录
memset和memcpy是C语言中的两个函数,它们的作用不同:
1. memset函数用于将一段内存空间的值设置为某个特定的值,通常用于初始化内存。例如,将一段内存空间全部设置为0:
“`
int arr[10];
memset(arr, 0, sizeof(arr));
“`
2. memcpy函数用于将一段内存空间的值复制到另一段内存空间中。例如,将一段内存空间复制到另一个数组中:
“`
int arr[10];
int arr2[10];
memcpy(arr2, arr, sizeof(arr));
“`
因此,memset和memcpy的主要区别在于它们所执行的操作不同:memset用于初始化内存,而memcpy用于复制内存。”
memcpy和memset的区别
memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
可以拿它拷贝任何数据类型的对象。
举例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
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可以方便的清空一个结构类型的变量或数组。
如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
对于变量
struct sample_strcut stTest;
一般情况下,清空stTest的方法:
stTest.csName[0]=’\0′;
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
如果是数组:
struct sample_struct TEST[10];
则
memset(TEST,0,sizeof(struct sample_struct)*10);
对这个问题有疑问,不是对函数的疑问,而是因为没有弄懂mem和str的区别。
mem是一段内存,他的长度,必须你自己记住
str也是一段内存,不过它的长度,你不用记,随时都可以计算出来
所以memcpy需要第三个参数,而strcpy不需要
memset起什么作用
memset是用第二个参数的值去填充第一个参数指向的内存块,
填充长度即为第三个参数.
而memcpy是把第二个参数的地址所指向的内存拷贝到第一个参数所指向的内存地址中,
长度也是第三个参数.
根据两个函数的涵义你可以知道
memcpy使用与memset完全可以独立.
两者并没有依赖关系.
strcpy和memcpy的区别
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。
strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。
strcpy不需要指定长度,它遇到被复制字符的串结束符”\0″才结束,所以容易溢出。
memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。
通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy