zoukankan      html  css  js  c++  java
  • strcpy和strdup比较和详解 (转)

    原文:https://blog.csdn.net/koozxcv/article/details/49306751

    strcpy和strdup比较和详解
    函数和功能描述:
    ①extern char *strdup(char *s);

    头文件:string.h

    功能: 将串拷贝到新建的位置处

    说 明:strdup不是标准的c函数。strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。
    返回值:返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。

     // strdup.c
    
    #include <syslib.h>
    
    #include <string.h>
    
    main() 
    
    { 
    
     char *s="Golden Global View";
    
    char *d;
    
     d=strdup(s);
    
    printf("%s",d);
    
    return 0;
    
    }
    

      

    ②char *strcpy(char* dest, const char *src);

    头文件:#include <string.h>和 #include <stdio.h>

    功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

    说明:strcpy是标准的C语言标准库函数。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

    返回值:返回指向dest的指针。

     举例:

     // strcpy.     
    
     #include <syslib.h>
    
     #include <string.h>     
    
     main()
    
      {        
    
    char *s="Golden Global View";
    
    char d[20]; 
    
    printf("%s",d);       
    
     return 0;    
    
      }
    

      

    总结:
    1.strdup不是标准的c函数,strcpy是标准的c函数,使用时注意场合。
    2.strdup可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针,strcpy的目的指针一定是已经分配内存的指针。
    3.strdup用完要free()函数释放内存,否则内存泄露 。
    4.使用strcpy必须事先确定src大小,可以先strlen判断src的大小,之后为dest申请空间,之后再strcpy就不会有问题了。
    ————————————————
    版权声明:本文为CSDN博主「koozxcv」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/koozxcv/article/details/49306751

  • 相关阅读:
    mybatis(2)操作数据库
    《构建之法》阅读笔记02
    mybatis(4)使用注解方式配置sql语句
    mybatis(5)参数传递
    Android Studio安装
    《构建之法》阅读笔记01
    反射
    mybatis(3)利用Mapper接口实现数据的增删改查
    activity组件
    mybatis(1)
  • 原文地址:https://www.cnblogs.com/lh03061238/p/12785586.html
Copyright © 2011-2022 走看看