一、memcpy函数
1.基本格式:
void * memcpy ( void * destination, const void * source, size_t num )
2.功能概要:
将source中的num个字节的内容复制到destination中
3.用法举例:
int main()
{
int arr2[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr1[11] = { 0,1,2,3,4,5,6,7,8,9,10 };
memcpy(arr1, arr2, 10 * sizeof(int));
int i = 0;
for (i = 0;i < 11; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
结果分析:输出1 2 3 4 5 6 7 8 9 10 10
arr1中的前十个数被arr2前十个替换。
二、memmove函数
1.基本格式:
void * memmove ( void * destination, const void * source, size_t num )
2.功能概要:
在同一个数组当中,对于目标和源头其中有重叠的部分,进行复制。
3.用法举例:
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr + 2, arr, 5 * sizeof(int));
int i = 0;
for (i = 0; i < (sizeof(arr) / sizeof(arr[0])); i++)
printf("%d ", arr[i]);
return 0;
}
结果分析:输出1 2 1 2 3 4 5 8 9 10
指针变量arr指向源头,指针变量arr+2指向目标,源头后面5*sizeof(int)个字节的内容被复制给了目标。
三、memset函数
1.基本格式:
void * memset ( void * ptr, int value, size_t num )
2.功能概要:
memset函数为内存设置函数,
以字节为单位,将ptr中前num个字节设置为value
3.用法举例:
①:
int main()
{
char arr[] = "hello world";
memset(arr, 'x', 5);
printf("%s\n", arr);
return 0;
}
结果分析:输出xxxxx world
arr中前五个字节对应的字符被替换成了‘x’,并直接打印。
②:
int main()
{
int arr[10] = { 0 };
memset(arr, 1, 10 * sizeof(int));
int i = 0;
for(i=0;i<10;i++)
printf("%d ", arr[i]);
return 0;
}
结果分析:输出16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
memset将arr中每一个字节都设置为了1,用16进制表示就是01010101,转为10进制即16843009
四、memcmp函数
1.基本格式:
int memcmp ( const void * ptr1, const void * ptr2, size_t num )
2.功能概要:
比较ptr1和ptr2的大小关系,包括各种类型。
3.用法举例:
int main()
{
int h = 0;
int arr1[] = { 1,2,3,4,5,6,7,8 };
int arr2[] = { 1,2,3,4,7 };
h = memcmp(arr1, arr2, 17);
printf("%d\n", h);
return 0;
}
结果分析:输出-1
比较的过程是一个字节一个字节的比较,测试所用编译器为小端存储,所以比较17个字节的时候,前16个相同,第17个是05与08比较;
当ptr1分别大于,等于,小于ptr2的时候,返回值分别为-1,0,1,这点和strcmp很像。
例子里05<08,输出-1。