C/C++——库函数strcpy和strdup比较
版权声明:原创文章,禁止转载。
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; }
参考资料:
- https://blog.csdn.net/jinjingwen/article/details/6314750
- https://blog.csdn.net/koozxcv/article/details/49306751