文章目录
摘要
本篇文章介绍了C语言中常用的内存操作函数,包括 memcpy、memmove、memset和memcpy。这些函数用于处理内存数据的复制、移动和初始化。文章中,对这几个函数进行了详细的解释和示例演示,并进行了模拟实现。
1. memcpy
1.1 函数介绍
函数原型:
void* memcpy ( void* destination, const void* source, size_t num );
- destination:目标地址,表示复制后数据存放的位置。
- source:源地址,表示要复制的数据的起始位置。
- num :要复制的字节数。
memcpy是一个将一个内存区域的内容复制到另一个内存区域的库函数。该函数将源地址 src 指向空间的前 num 个字节的内容复制到目标地址 dest 指向的空间中去。
以下代码,展示了如何使用 memcpy 函数复制字符串:
#include <stdio.h>
#include <string.h>
int main() {
const char* src = "Hello, world!";
char dest[20];
// 使用 memcpy 复制字符串
memcpy(dest, src, src);
// 打印复制后的字符串
printf("复制后的字符串:%s\n", dest);
return 0;
}
- 注意:
- memcpy 不会检查源地址和目标地址是否重叠,因此在使用时需要确保没有发生重叠。
- C语言标准规定:memcpy来完成不重叠的内存拷贝。如果要完成内存重叠的拷贝,可以使用 memmove 函数。
1.2 模拟实现
实现思路:
- 创建一个循环,逐字节地从源地址复制到目标地址。
- 在循环中,从源地址 src 指向的空间中读取一个字节的内容,然后将它写入目标地址 dest指向的空间中。
- 重复上述步骤,直到复制了 num 个字节。
- 复制完成后,返回目标空间的起始地址_dest。
#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(src && dest);//检查参数是否有效
void* _dest = dest;//保存目标空间起始地址
// 逐字节复制,复制num个字节
while (num--)
{
//从src指向的空间中读取一个字节的内容,然后将它写入目标地址空间dest指向的空间中
*(char

本文详细介绍了C语言中的四个常用内存操作函数:memcpy用于非重叠复制,memmove处理重叠区域,memset用于内存初始化,memcmp用于比较内存区域。通过实例演示了它们的用法和模拟实现。
最低0.47元/天 解锁文章
5797





