引言
内存函数和之前学习的字符串函数还是有许多的相似处,最大的区别在于一个只能对字符串进行操作,而另一个可以对所有类型进行操作。
memcpy
void* memcpy ( void* destination, const void* source, size_ tnum );
在执行时,没遇到'\0'的情况下,是不会停止的。
函数
memcpy
从
source
的位置开始向后复制
num
个字节的数据到
destination
的内存位置。
如果
source
和
destination
有任何的重叠,复制本身覆盖是无意义的。
#include<stdio.h>
#include<string.h>
int main()
{
char a[] = "abcderg";
char b[100];
memcpy(b, a, strlen(a) + 1);
printf("%s", b);
return 0;
}
memove
void* memmove ( void* destination, const void* source, size_ tnum );
如果源空间和目标空间出现重叠,就得使用
memmove
函数处理。
memove和memcpy的区别就为源内存块和目标内存块是否可以重叠的
int main()
{
char str[] = "abcdefgh";
memmove(str+4, str+2, 4);
puts(str);
return 0;
}
memcmp
int memcmp ( const void* ptr1,const void* ptr2,size_t num );
比较从
ptr1
和
ptr2
指针开始的
num
个字节。
返回值为ptr1大于ptr2返回大于0的数,反之返回小于0的数,等于返回0。
int main()
{
char str1[] = "abcdefgh";
char str2[] = "abcdefgx";
int tmp = memcmp(str1, str2, sizeof(str1));
if (tmp > 0)
{
printf("ptr1 > ptr2\n");
}
else if (tmp < 0)
{
printf("ptr1 < ptr2\n");
}
else
{
printf("ptr1 = ptr2\n");
}
return 0;
}