正文开始
本篇文章所讲函数均需引用头文件string.h>>>详情戳我
1. memcpy - 复制
memcpy 函数用于将一个缓冲区复制到另一个
void* memcpy( void *dest, const void *src, size_t count );
memcpy 用法:
- memcpy 函数从 src 的位置开始向后复制 count 个字节的数据到 dest 指向的内存位置
- 函数遇到‘\0’时并不会停下来
- 若 src 和 dest 内存有重叠,复制的结果为未定义
- dest 所指向空间需足够大,以保证能放下count 个字节的数据
例如:
#include <stdio.h>
#include <string.h>
int main()
{
int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10] = { 0 };
memcpy(arr2, arr1, 16);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
运行结果:
2. memmove - 可重叠复制
memove 函数也可将一个缓冲区复制到另一个,但它不同于 memcpy 函数的是:它所处理的源内存块和目标内存块是可以重叠的
void* memmove( void* dest, const void* src, size_t count );
memove 用法:
- 源空间与目标空间出现重叠时,可以使用 memove 函数,其他与 memcpy 函数类似,这里不再赘述
例如:
#include <stdio.h>
#include <string.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr,arr + 5, 16);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果:
3. memset - 填充内存
meeset 函数用来将内存中的值以字节为单位设置成想要的內容
void *memset( void *dest, int ch, size_t count );
memset 用法:
- memset 函数将(unsigned char)ch复制到指针 dest 所指向的地址的后 count 个字节中
- dest 所指向的空间需要足够大,以保证能存放下 count 个字节的数据
- dest 若为空指针,则行为未定义
- 函数返回值为 dest 的副本
例如:
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "I am wwangxu.";
printf("%s\n", str);
memset(str, '*', 5);
printf("%s\n", str);
return 0;
}
4. memcmp - 比较内存
memcmp 函数以字节为单位,比较两块内存
int memcmp( const void* lhs, const void* rhs, size_t count );
memcmp 用法:
- 比较 lhs 和 rhs 所指向的对象的开头 count 个字节,以字节为单位
- memcmp 函数会从两指针起始位置开始,逐字节比较每个位置上的內容,比较过程中若比较出了某字节的大小,则停止比较,按照该字节內容的大小来决定哪个指针指向的內容更大,若 lhs 比 rhs 大,则返回值为正值;若相等,或 count 为零则返回值为零;若小于,则返回值为负值
例如:
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "I am wwangxu";
char str2[] = "I am not wwangxu";
printf("str1和str2比较4个字节的结果:%d\n", memcmp(str1, str2, 4));
printf("str1和str2比较6个字节的结果:%d\n", memcmp(str1, str2, 6));
printf("str2和str1比较6个字节的结果:%d\n", memcmp(str2, str1, 6));
return 0;
}
完