根据网站做app网站收录查询接口
根据网站做app,网站收录查询接口,菏泽营销网站建设,如何在网站找做贸易的客户内存函数主要用于动态分配和管理内存#xff0c;它直接从指针的方位上进行操作#xff0c;可以实现字节单位的操作。
其包含的头文件都是#xff1a;string.h
memcpy
copy block of memory的缩写----拷贝内存块
格式#xff1a;
void *memcpy(void *dest, const void …内存函数主要用于动态分配和管理内存它直接从指针的方位上进行操作可以实现字节单位的操作。
其包含的头文件都是string.h
memcpy
copy block of memory的缩写----拷贝内存块
格式
void *memcpy(void *dest, const void *src, size_t num);作用与strcpy类似但是从内存的角度从source的位置开始向后复制num个字节的数据到destination指向的内存位置。
要求
• 这个函数在遇到 \0 的时候并不会停下来。也就是说如果在数据中间插入 ‘\0’ 是不会停下复制进程的。
• 如果source和destination有任何的重叠复制的结果都是未定义的。
• 鉴于拷贝的类型不一使用*void来表示任意类型。
• num的单位是字节
实例
int main()
{char arr1[20] hello world;char arr2[20] ;memcpy(arr2, arr1,strlen(arr1)1);//需要复制的字节数为arr1的长度加上字符串结束符\0printf(%s, arr2);return 0;
} int main()
{int arr1[10] { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] { 0 };//将arr1中的4 5 6 7 8拷贝到arr2中memcpy(arr2, arr13, 5 * sizeof(int));//可以拷贝数组中的任意数据int i 0;for (i 0; i 10; i){printf(%d , arr2[i]);}return 0;
}
模拟实现
void* my_memcpy(void* dest, const void* src, size_t num)
{void* ret dest;while (num--)//根据所要复制的字节数进行递减直到复制完成{assert(dest src);*(char*)dest *(char*)src;dest (char*)dest1;src (char*)src 1;}return (ret);
}
memmove
move block of memory的缩写----内存体转移
格式
void * memmove ( void * destination, const void * source, size_t num );
作用与要求
• 和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 如果源空间和⽬标空间出现重叠就得使⽤memmove函数处理。由于该特性实际上memmove比memcpy更加实用兼容性也更强。
实例
int main()
{int arr1[] { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 2, arr1, 20);//20个字节就是五个整型在这里arr12也就是从3开始拷贝1,2,3,4,5五个数字int i 0;for (i 0; i 10; i){printf(%d , arr1[i]);}return 0;
}//打印出的结果是1,2,1,2,3,4,5,8,9,10因为arr1的空间只够放下十个整型并且mommove是允许重叠内存空间的
模拟实现
void* my_memmove(void* dest, const void* src, size_t n)
{unsigned char* d (unsigned char*)dest;const unsigned char* s (const unsigned char*)src;if (s d s n d) {// 如果源地址在目标地址之前且重叠for (size_t i n; i 0; i--) {d[i - 1] s[i - 1];}} else {// 普通情况下的复制for (size_t i 0; i n; i) {d[i] s[i];}}return dest;
}memset
set block of memory的缩写----填充设置内存块
格式
void * memset ( void * ptr, int value, size_t num );
作用memset是⽤来设置内存的将内存中的值以字节为单位设置成想要的内容。同时在重叠内存空间时实现覆盖原内容。
要求
• 使用memset函数时需要谨慎确保不会意外覆盖原有的数据。
实例
int main()
{char str[] almost every programmer should know memset!;memset(str, -, 6);printf(str)return 0;
}//结果是 ------ every programmer should know memset!
//也就是说将almost覆盖模拟实现
void* my_memset(void* ptr, int value, size_t num)
{unsigned char* p (unsigned char*)ptr;for (size_t i 0; i num; i) {p[i] (unsigned char)value;}return ptr;
}
memcmp
compare block of memory的缩写----比较内存块
作用与strcmp类似⽐较从ptr1和ptr2指针指向的位置开始向后的num个字节参照下表 注意同strcmp不同的是memcmp可以比较内存区域的大小具体参照下方实例。
实例
int main()
{char ned1[] dsdsdssdds1;char ned2[] dsdsdssdds2;int n;n memcmp(ned1, ned2, 44);printf(%d, n);return 0;
}
模拟实现
int my_memcmp(const void* ptr1, const void* ptr2, size_t num)
{//比较内存区域大小const unsigned char* p1 (const unsigned char*)ptr1;const unsigned char* p2 (const unsigned char*)ptr2;for (size_t i 0; i num; i) {if (p1[i] p2[i]) return -1;if (p1[i] p2[i]) return 1;}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/87949.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!