strcpy和strdup比較和詳解
strcpy和strdup比較和詳解
函數(shù)和功能描述:
①extern char *strdup(char *s);
頭文件:string.h
功能: 將串拷貝到新建的位置處
說 明:strdup不是標準的c函數(shù)。strdup()在內(nèi)部調(diào)用了malloc()為變量分配內(nèi)存,不需要使用返回的字符串時,需要用free()釋放相應(yīng)的內(nèi)存空間,否則會造成內(nèi)存泄漏。
返回值:返回一個指針,指向為復(fù)制字符串分配的空間;如果分配空間失敗,則返回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結(jié)束符的字符串復(fù)制到以dest開始的地址空間
說明:strcpy是標準的C語言標準庫函數(shù)。src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回值:返回指向dest的指針。
舉例:
// strcpy.
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
char d[20];
printf("%s",d);
return 0;
}
總結(jié):
1.strdup不是標準的c函數(shù),strcpy是標準的c函數(shù),使用時注意場合。
2.strdup可以直接把要復(fù)制的內(nèi)容復(fù)制給沒有初始化的指針,因為它會自動分配空間給目的指針,strcpy的目的指針一定是已經(jīng)分配內(nèi)存的指針。
3.strdup用完要free()函數(shù)釋放內(nèi)存,否則內(nèi)存泄露 。
4.使用strcpy必須事先確定src大小,可以先strlen判斷src的大小,之后為dest申請空間,之后再strcpy就不會有問題了。
————————————————
原文鏈接:https://blog.csdn.net/koozxcv/article/details/49306751
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。