linux C函數之strdup函數分析
阿新 • • 發佈:2017-09-15
c函數之strdup函數分析
一.函數分析
1.函數原型:
#include <string.h>
char *strdup(const char *s);
2.功能:
strdup()函數主要是拷貝字符串s的一個副本,由函數返回值返回,這個副本有自己的內存空間,和s沒有關聯。strdup函數復制一個字符串,使用完後,要使用delete函數刪除在函數中動態申請的內存,strdup函數的參數不能為NULL,一旦為NULL,就會報段錯誤,因為該函數包括了strlen函數,而該函數參數不能是NULL。
3.strdup函數實現
char * __strdup(const char *s)
{
size_t len = strlen(s) +1;
void *new = malloc(len);
if (new == NULL)
return NULL;
return (char *)memecpy(new,s,len);
}
#strdup只是內部分配了空間,並沒有釋放,釋放需要由調用者去做。
4.函數實例
#include <syslib.h>
#include<string.h>
int main(void)
{
char *src =”This is the jibo”;
char *dest=NULL;
dest = strdup(s);
printf(“the dest %s\n”,dest);
if(dest) free(dest);
return 0;
}
二.strdup與strcpy函數的區別
1.共同點:
兩個函數都實現了字符串的拷貝。
2.不同點:
1)strcpy函數:把從src地址開始且含有NULL結束符的字符串復制到以dest開始的地址空間
2)實現:
char *strcpy(char *strdest,const char *strsrc)
{
assert((strdest!=NULL) &&(strsrc!=NULL));
char *address = strdest;
while((*strdest ++ = *strstrc++) !=’\0’) ;
return address;
}
3)由strcpy和strdup函數實現可知
1>strdup函數返回指向被復制的字符串的指針,所需空間由malloc()函數分配且可以由free()函數釋放。stdrup可以直接把要復制的內容復制給沒有初始化的指針,因為它會自動分配空間給目的指針。
2>strcpy的目的指針一定是已經分配好的內存指針。
4)strdup的缺點:
使用strdup函數的時候,往往會忘記內存的釋放,因為申請內存空間的動作是在strdup函數內實現,如果對該函數的實現不是很了解,則會忘記使用free函數來釋放空間。
本文出自 “Linux_woniu” 博客,請務必保留此出處http://llu1314.blog.51cto.com/5925801/1965246
linux C函數之strdup函數分析