strdup函式的用法

2021-06-28 15:55:11 字數 1414 閱讀 9718

函式名: strdup

功  能: 將串拷貝到新建的位置處

用  法: char *strdup(char *str);

這個函式在linux的man手冊裡解釋為:

the strdup() function returns a pointer toa new string which is a

duplicate of the string s. memory for thenew string is obtained with

malloc(3), and can be freed with free(3).

the strndup() function is similar, but onlycopies at most n charac-

ters. if s is longer than n, only ncharacters are copied, and a termi-

nating nul is added.

strdup函式原型:

strdup()主要是拷貝字串s的乙個副本,由函式返回值返回,這個副本有自己的記憶體空間,和s不相干。strdup函式複製乙個字串,使用完後要記得刪除在函式中動態申請的記憶體,strdup函式的引數不能為null,一旦為null,就會報段錯誤,因為該函式包括了strlen函式,而該函式引數不能是null。

strdup的工作原理:

char * __strdup (const char *s)

例項1:

c/c++ code

#include

#include

#include

int main(void)

例項2:

#include

#include

#include

unsigned int test()

int main()

在test函式裡使用strndup而出了test函式仍可以操作這段記憶體,並且可以釋放。

由這個問題而延伸出來的問題就是,如何讓函式得到的記憶體資料傳出函式但仍可用。

解決方法目前本人只想到兩個: 乙個外部變數,如傳遞乙個記憶體塊指標給函式,但這種做法就是你得傳遞足夠的記憶體,也就是你不能事先知道這個函式到底要多大的buffer。

另一種方法就是在函式內部申請static變數,當然這也是全域性區的變數,但這種做法的缺點就是,當函式多次執行時,static變數裡面的資料會被覆蓋。這種型別的另乙個方法就是使用全域性變數,但這和使用static變數很相同,不同的是全域性變數可以操作控制,而static變數如果不把它傳出函式,就不可對它操作控制了。另一類方法就是上面所述的,利用堆裡的記憶體來實現,但存在危險。strdup是從堆中分配空間的!strdup呼叫了malloc,所以它需要釋放!對於堆疊:堆是由程式設計師來管理的,比如說new,malloc等等都是在堆上分配的!

棧是由編譯器來管理的。

linux C函式之strdup函式分析

1.函式原型 include char strdup const char s 2.功能 strdup 函式主要是拷貝字串s的乙個副本,由函式返回值返回,這個副本有自己的記憶體空間,和s沒有關聯。strdup函式複製乙個字串,使用完後,要使用delete函式刪除在函式中動態申請的記憶體,strdup...

C語言中strdup函式使用方法

標頭檔案 include 定義函式 char strdup const char s 函式說明 strdup 會先用malloc 配置與引數s 字串相同的空間大小,然後將引數s 字串的內容複製到該記憶體位址,然後把該位址返回。該位址最後可以利用free 來釋放。返回值 返回一字串指標,該指標指向複製...

strdup與strcpy具體的區別

我分別在xp的環境和linux環境下編譯執行c 我發現乙個不解的現象 現象描述 兩個字串 char from,char to 要把from的內容複製給to。我在xp下,用strcpy to,from 出現memory問題,於是換成 to strdup from 就執行正常。而在linux下,用to ...