strdup與strcpy具體的區別

2021-04-27 19:51:39 字數 2396 閱讀 5303

我分別在xp的環境和linux環境下編譯執行c**,我發現乙個不解的現象:

現象描述:

兩個字串 char* from, char* to;要把from的內容複製給to。

我在xp下,用strcpy(to, from)出現memory問題,於是換成

to = strdup(from),就執行正常。

而在linux下,用to = strdup(from)出現memory問題(報錯資訊:* glibc detected *** free(): invalid next size (fast): 0x09a8d868 ***),於是換成strcpy(to, from),就執行正常。

請大家指教:

1,如何解釋我遇到的這種現象;

2,strdup與strcpy具體的區別,以及在不同作業系統下的使用。

謝謝!strdup

原型:extern

char

*strdup(

char

*s);

用法:#include

<

string

.h>

功能:複製字串s

說明:返回指向被複製的字串的指標,所需空間由malloc()分配且可以由free()釋放。

舉例://

strdup.c

#include

<

syslib.h

>

#include

<

string

.h>

main()

strcpy

原型:extern

char

*strcpy(

char

*dest,

char

*src);

用法:#include

<

string

.h>

功能:把src所指由null結束的字串複製到dest所指的陣列中。

說明:src和dest所指記憶體區域不可以重疊且dest必須有足夠的空間來容納src的字串。

返回指向dest的指標。

舉例://

strcpy.c

#include

<

syslib.h

>

#include

<

string

.h>

main()

從手冊裡copy的!~函式名: strdup

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

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

程式例:

c/c++ code

#include 

<

stdio.h

>

#include

<

string

.h>

#include

<

alloc.h

>

intmain(

void

)

函式名: strcpy

功  能: 串拷貝

用  法: char *strcpy(char *str1, char *str2);

程式例:

c/c++ code

#include 

<

stdio.h

>

#include

<

string

.h>

intmain(

void

)

strdup不是標準的c函式,所以linux會報錯!~ 

strcpy是標準的c函式,在windows裡報錯是因為指標沒申請空間吧!~

可以先strlen判斷from的大小,之後為to申請空間,之後再strcpy就不會報錯了!~

strdup可以直接把要複製的內容複製給沒有初始化的指標,因為它會自動分配空間給目的指標 

strcpy的目的指標一定是已經分配記憶體的指標

請問:用to = strdup(from)後,應該必須用free(to)吧,謝謝

linux下的c是ansi c,strdup不是標準庫函式

strdup用完要free否則 記憶體洩露 

strcpy拷貝到你分配的記憶體

strdup 內部在堆上建立了乙個備份,所以即使沒看到malloc也應該在使用完畢後得自己手動釋放(free); 

strcpy 使用的時候,必須已經擁有了足夠的空間才行。

strdup與strcpy具體的區別

根據 strdup 的用法,寫了下面的程式 執行結果如下 首先對於 strdup 函式來說 include include 因為要用 free 函式 extern char strdup char src 函式返回乙個指標,該指標會指向 複製字串分配的空間 複製字串 src 如果分配空間失敗,則返回...

關於strcpy以及strdup的區別

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

strcpy和strdup比較和詳解

extern char strdup char s 標頭檔案 string.h 功能 將串拷貝到新建的位置處 說 明 strdup不是標準的c函式。strdup 在內部呼叫了malloc 為變數分配記憶體,不需要使用返回的字串時,需要用free 釋放相應的記憶體空間,否則會造成記憶體洩漏。返回值 返...