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