目录
1.memcpy()函数
memcpy()函数是一个内存操作函数,用法就是拷贝内存中的数据,但是它可以拷贝多种类型如:字符串,浮点数,整形数组等。
它的函数声明如下:
void * memcpy ( void * destination, const void * source, size_t num );
void * destination为目标空间地址;void * source为拷贝地址,const修饰避免更改;num为无符号字节数;它的返回类型,目标空间,拷贝地址都为void*,因为void*可以接收任意类型,一但改成固定类型就只能适用于所修改的类型。
使用例子一:
这里可以看到它将arr1中的五个字符全部复制到了arr中,返回值为arr首元素地址。
使用例子二:
这里与例子1的差别在于我将num位置的五改成六,使他复制时复制了一个'\0',而打印字符串遇见'\0'就会停止导致它只打印了12345。
从这里就可以看出memcpy()函数是一个不负责任的函数,它并不会考虑你拷贝的内容是什么
注意:目标空间地址的大小需要给足,否则一旦拷贝的内容过多就会出现越界访问
使用例子三:
这里使用整形数组来拷贝,num是需要拷贝的内存大小,五个整形20个字节。这里一旦写的不是20个字节,就会出现错误,如过大导致越界访问,过小导致拷贝不完整。
使用错误例子四:
这里的使用就是内存重叠,正常输出应该是1 2 1 2 3 4 5 6 7 8 9 0;
但实际上会输出1 2 1 2 1 2 1 8 9 0;
进行拷贝时3会被拷贝成1,4会被拷贝成2,当5,6拷贝3,4的时候又会反复拷贝1,2。所以应该避免该行为。
2.memmove()函数
memmove()函数则是专门处理内存重叠的函数,它和memcpy()函数都有拷贝的能力
它的函数声明:
void * memmove ( void * destination, const void * source, size_t num );它的参数与memcpy()函数一致,但是它可以处理内存重叠的情况。
使用方法:
可以看到打印的就是想要的结果。
注意:在使用memcpy()和memmove()时应该注意使用的条件,避免出现错误。
4.memcmp()函数
memcmp()函数是一个内存比较函数,它是以字节为单位进行比较的函数。
它的函数声明:
int memcmp ( const void * ptr1, const void * ptr2, size_t num );当ptr1>ptr2时返回1;ptr1<ptr2时返回-1;ptr1=ptr2时返回0;
这里的内存是小端存放,当它比较完前两个整形(8个字节)后来到第九个字节发现不相等了返回-1。
希望这篇文章能够帮助到您,谢谢您的阅读。