1. 程式人生 > >linux C函數之strdup函數分析

linux C函數之strdup函數分析

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函數分析