湖南建设教育网站,青白江建设局网站,工地招工,合肥金融网站开发目录
memcpy
memmove
memcmp memcpy
void * memcpy ( void * destination, const void * source, size_t num ); 1.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 2.这个函数在遇到 \0 的时候并不会停下来。 3.如果source和destination有…
目录
memcpy
memmove
memcmp memcpy
void * memcpy ( void * destination, const void * source, size_t num ); 1.函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。 2.这个函数在遇到 \0 的时候并不会停下来。 3.如果source和destination有任何的重叠复制的结果都是未定义的。 memcpy是内存拷贝拷贝字符串、整形数组、结构体数据。 memcpy用来处理不重叠的内存拷贝 void* my_memcpy(void* str1, void* str2, int num)
{assert(str1 str2);void* ret str1;while (num--)//19 18 .. 1 {*(char*)str1 *(char*)str2;((char*)str1);((char*)str2);}return ret;
}
int main()
{float arr1[] { 1.0,2.0,3.0 };float arr2[5] { 0 };my_memcpy(arr2, arr1, 8);int i 0;for (i 0; i 5; i){printf(%f , arr2[i]);}return 0;
}
memmove
void * memmove ( void * destination, const void * source, size_t num ); 1.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 2.如果源空间和目标空间出现重叠就得使用memmove函数处理。 重叠的内存拷贝还是交给memmove来做 memmove当然也可以拷贝不重叠的拷贝 应用范围memmovememcpy void* my_memmove(void* dest, void* src, int num)
{void* ret dest;assert(dest src);if (dest src)//后-前{while (num--){*((char*)dest num) *((char*)src num);}}else if (dest src)//前-后{while (num--){*(char*)dest *(char*)src;((char*)dest);((char*)src);}}return ret;}int main()
{/*char str[] memmove can be very useful......;memmove(str 20, str 15, 11);puts(str);*/int arr1[] { 1,2,3,4,5,6,7,8,9,10 };my_memmove(arr1 2, arr1, 20);int i 0;for (i 0; i 10; i){printf(%d ,arr1[i]);}return 0;
}
memcmp
int memcmp ( const void * ptr1,const void * ptr2,size_t num ); 比较从ptr1和ptr2指针开始的num个字节 返回值和strcmp相似。
int main()
{int arr1[] { 1,2,1,4,5,6 };int arr2[] { 1,2,257 };int ret memcmp(arr1, arr2, 9);printf(%d\n,ret);return 0;
}