網站首頁 編程語言 正文
前言
memcpy函數如何使用,以及如何實現我們自己的my_memcpy在這里給大家詳細介紹。
一、什么是memcpy
memcpy是c和c++使用的內存拷貝函數,memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。
二、memcpy與strcpy的區別
1.復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2.復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
3.用途不同。通常在復制字符串時用strcpy,而需要復制其他類型數據時則一般用memcpy
1.strcpy
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { 0 };
strcpy(arr2, arr1);
printf("%s", arr2);
return 0;
}
我們再看一下下面的代碼
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[5] = { 0 };
printf("%s", arr2);
return 0;
}
這時我們發現arr2就不能正常的拷貝了,因為strcpy只能拷貝字符串,int類型的數組或者結構體都是不能拷貝的,因為strcpy比較依賴’\0’通過檢測‘\0’來實現函數的,這時就需要我們的memcpy函數了。
2.memcpy
我們這里簡單介紹一下函數的使用,函數的三個參數分別是dest(要復制的目的地),str(原目標),count(要復制內容的大小)。
struct S
{
char name[10];
int age;
};
int main()
{
struct S arr1[] = {{"ajd",20},{"qwe",18}};
struct S arr2[3] = { 0 };
memcpy(arr2, arr1, sizeof(arr1));
return 0;
}
這里我們通過memcpy函數成功復制了結構體arr1。
三、模擬實現memcpy
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* ret = dest;
while (num--)
{
*(char*)dest = *(char*)src;
++(char*)dest;
++(char*)src;
}
return ret;
}
struct S
{
char name[10];
int age;
};
int main()
{
struct S arr1[] = {{"ajd",20},{"qwe",18}};
struct S arr2[3] = { 0 };
my_memcpy(arr2, arr1, sizeof(arr1));
return 0;
}
這里我們模擬實現了memcpy函數。
總結
原文鏈接:https://blog.csdn.net/m0_56911284/article/details/125831972
相關推薦
- 2022-03-24 樹莓派搭建nas服務器的詳細過程_Linux
- 2022-07-12 微信小程序(條件渲染和列表渲染)
- 2022-05-22 ansible管理工具的環境及部署安裝_服務器其它
- 2022-08-10 Python格式化輸出的具體實現_python
- 2022-07-02 C++中關于互斥量的全面認知_C 語言
- 2022-02-11 idea package合在一起,利用Compact Middle Packages解決 &
- 2022-08-06 C語言繪制簡單時鐘小程序_C 語言
- 2022-06-21 Flutter實現單選,復選和開關組件的示例代碼_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支