C语言 内存函数
1、memcpy
void * memcpy ( void * destination, const void * source, size_t num );
size_t num 表示 要拷贝的 数据占的字节数
从 source 的 位置 开始向后复制num个字节数据到destination中指向的内存位置,若空间有重叠,复制的结果为未定义的
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[10] = { 0 };
memcpy(arr2, arr1, 20);
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d", arr2[i]);
}
return 0;
}
strcpy 只能拷贝字符串,遇到 '\0' 就停;
memcpy 可以拷贝任意数据,你让它拷多少就拷多少。
memcpy 你指定长度,它就拷多少
不管里面有没有 \0,不管是什么数据
memcpy 完成内存块拷贝的,不关注内存中的数据是什么类型 所以用 void*
2、memmove
与memcpy 的差别是 函数处理的原内存块和目标内存块是可以重叠的
void * memmove ( void * destination, const void * source, size_t num );

void* my_memmove(void* dest, const void* src, sizr_t num)
{
void* ret = dest;
assert(dest && src);
if (dest < src)
{
// 从前 往 后
while (num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
}
else
{
// 从后 往 前
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
3、memset 用来设置内存块的内容,将内存中指定长度的空间设置为特定的内容
void * memset ( void * ptr, int value, size_t num );
ptr 指针指向要设置的内存空间要存放的内存空间的起始地址
int main()
{
char arr[] = "hello world";
memset(arr, 'x', 5);
printf("%s\n", arr);
return 0;
}
4、memcmp
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
比较指定的两块内存的从内容,比较ptr1 和 ptr2 指针指向的位置开始,向后num 个字节
小结:如果要比较2快内存的空间的数据大小,可以使用memcmp函数,这个函数的特点就是可以指定此数的长度,memcmp 就是 通过返回值告知大小关系
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)