首页 > 编程语言 > 详细

C/C++——库函数strcpy和strdup比较

时间:2018-09-28 12:14:04      阅读:170      评论:0      收藏:0      [点我收藏+]

版权声明:原创文章,禁止转载。

 


1. strcpy

 

原型: extern char *strcpy(char *dest,char *src); 

用法: #include <string.h> 

功能:把src所指由 ‘\0‘ 结束的字符串复制到dest所指的字符数组中。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。

举例: 

#include <string.h>
#include <stdio.h> 
int main(void) { 
    char *src="Hello C!"; 
    char dest[10]; 
    strcpy(dest,src);
    printf("%s\n",dest);
    return 0; 
}

输出:

技术分享图片

 


2. strdup

 

原型: extern char *strdup(char *s); 

用法: #include <string.h> 

功能:复制字符串s

说明:返回指向被复制的字符串的指针,所需空间由malloc()分配且可以由free()释放。

举例: 

#include <string.h> 
#include <stdio.h> 
#include <stdlib.h>

int main(void) { 
    char *src = "Hello C!";
    char *dest = strdup(src); 
    printf("%s\n",dest);
    free(dest);
    return 0; 
} 

输出:

技术分享图片

 


3. strcpy和strdup比较

  • strdup不是标准的c函数,strcpy是标准的c函数,使用时注意场合;

  • strdup可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针,strcpy的目的指针一定是已经分配内存的指针;

  • strdup用完要free()函数释放内存,否则内存泄露;

  • 使用strcpy必须事先确定src大小,可以先strlen判断src的大小,之后为dest申请空间(dest的空间不小于strlen(src)+1),之后再strcpy就不会有问题了。

strdup可以由strcpy实现如下:

char *strdup(const char *s) { 
    char *t = NULL; 
    if(s && (t = (char*)malloc((strlen(s)+1))) {
        strcpy(t, s); 
    }  
    return t; 
}

 

 


 参考资料:

  1. https://blog.csdn.net/jinjingwen/article/details/6314750
  2. https://blog.csdn.net/koozxcv/article/details/49306751

 

C/C++——库函数strcpy和strdup比较

原文:https://www.cnblogs.com/oddcat/p/9717326.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!