内存操作函数之memset和memcpy |
您所在的位置:网站首页 › memcpy读音 › 内存操作函数之memset和memcpy |
memset函数
包含头文件:string或者memory extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.这个函数在socket中多用于清空数组. 如:原型是memset(buffer, 0, sizeof(buffer)) Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’; 例:char a[100];memset(a, ‘/0’, sizeof(a)); memset可以方便的清空一个结构类型的变量或数组。 清空数组 char a[100];memset(a, '/0', sizeof(a));清空结构体: 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); memcpy函数 void *memcpy(void*dest, const void *src, size_t n);包含头文件:string或者memory 功能:从源src所指的内存地址的起始位置开始,拷贝n个字节的数据到目标dest所指的内存地址的起始位置中。 说明: 1)src和dest所指内存区域不能重叠,函数返回指向dest的指针。如果src和dest以任何形式出现了重叠,它的结果是未定义的。 2)与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。 3)如果目标数组本身已有数据,执行memcpy之后,将覆盖原有数据(最多覆盖n个)。 如果要追加数据,则每次执行memcpy()后,要将目标地址增加到要追加数据的地址。 4)source和destin都不一定是数组,任意的可读写的空间均可。 注意:memcpy是将原字符串全部拷贝,连同\0也会拷贝 strcpy遇到\0会停止拷贝 #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char ch[20] = "abc\0efghj"; printf("%s\n", ch); char ch1[20]; memcpy(ch1, ch, sizeof(ch)); printf("%s\n", ch1); printf("验证是否将原字符串连同结束符一起拷贝\n"); for (int i = 4; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |