首页 > 其他分享 >memcpy函数用法2

memcpy函数用法2

时间:2022-11-28 22:26:02浏览次数:70  
标签:p2 p3 p1 函数 dest 用法 memcpy 指针

头文件

#include <string.h>

memcpy() 用来复制内存,其原型为:
    void * memcpy ( void * dest, const void * src, size_t num );

memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。

memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。

注意


dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。
dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。

与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“\0”而结束。

【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。

 

demo

  1.  #define N (10)
  2.  #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. int main(){
  6. char* p1 = "abcde";
  7. char* p2 = (char*)malloc(sizeof(char) * N);
  8. //arg0: dest arg1: src arg2:size_t 复制长度
  9. char* p3 = (char*)memcpy(p2, p1, N);
  10. printf("p2 = %s\np3 = %s\n", p2, p3);
  11. printf("p1.address=%p \n",p1);
  12. printf("p2.address=%p \n",p2);
  13. printf("p3.address=%p \n",p3);
  14. // *p3--;
  15. free(p2);
  16. p2 = NULL;
  17. p3 = NULL;
  18. // system("pause");
  19. return 0;
  20. }

运行结果:

p2 = abcde

p3 = abcde

p1.address=0x10000bbb3

p2.address=0x10056a490

p3.address=0x10056a490

代码说明:
1) 代码首先定义p1,p2,p3三个指针,但略有不同,p1指向一个字符串字面值,给p2分配了10个字节的内存空间。

2) 指针p3通过函数memcpy直接指向了指针p2所指向的内存,也就是说指针p2、p3指向了同一块内存。然后打印p2,p3指向的内存值,结果是相同的。

3) 最后按照好的习惯释放p2,并把p3也置为NULL是为了防止再次访问p3指向的内存,导致野指针的发生。

 


  

标签:p2,p3,p1,函数,dest,用法,memcpy,指针
From: https://www.cnblogs.com/amxiang/p/16933831.html

相关文章

  • 0120-Go-字符串函数
    环境Time2022-08-25Go1.19前言说明参考:https://gobyexample.com/string-functions目标使用Go语言的字符串函数。示例packagemainimport("fmt"......
  • Promise的简单用法
    什么是Promise?Promise是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。Promise对象有以下两个特点。......
  • 索引函数
    C#提供了索引函数机制来提供快速、可读性强的读写方式。索引函数的语法是:public<type>this[<indextype><paramtername>]{//get和set至少有一个get{//get......
  • Java8 Function 用法简介
    publicclassFunctionTest{publicstaticvoidmain(String[]args){Function<Numbers,Integer>test1=i->i.getN1()-i.getN2();Funct......
  • 13 STL-函数对象
    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧!写在前面,本篇章主要介......
  • MySQL自定义函数
     ⚠不推荐将业务逻辑存储在数据库中.MySQL不仅提供了很多很方便的内置函数,用户还可以自定义函数。不同于MongoDB对Js函数的良好支持,MySQL的自定义函数用起来感觉处处掣......
  • C++11:lambda匿名函数
    lambda源自希腊字母表中第11位的λ,在计算机科学领域,它则被用来表示一种匿名函数。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为lambda函数或者lambda表达......
  • 模板字符串不常见的用法
    先记录一下......
  • Oracle中ALTER TABLE的五种用法(三)
    首发微信公众号:SQL数据库运维原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1&sn=450e9e94fa709b5eeff0de371c62072b&chksm=ea37536cdd......
  • C++中的几种构造函数和析构函数
    本篇文章,我们来了解一下C++中的几种构造函数,以及析构函数#include<format>#include<iostream>#include<string>usingstd::format;usingstd::cout;usingstd::......