strdup與strcpy具體的區別:
[引]我分別在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具體的區別,以及在不同作業系統下的使用。
謝謝!
---- 我自己在ubutu10.10上的實驗(gcc4.4.5)結果:
編譯過程沒有提示錯誤和警告資訊,但是執行的時候提示段錯誤!!
---- 一些不錯的解答
1, strdup可以直接把要複製的內容複製給沒有初始化的指標,因為它會自動分配空間給目的指標 ,使用之後要釋放相應記憶體
strcpy的目的指標一定是已經分配記憶體的指標
2, char *strdup(const char *s)
strcpy以及memcpy的實現
上過大學的計算機系的莘莘學子們,遺憾啊,在國產的教科書的惡臭的薰陶下,四年的青春流逝,悲哀啊!很幸運在大學中有很多研究gnu的人,這些人是幸運的,在學會了hello world之後就和國產教科書分道揚鑣了。前面的文章分析了strstr的各種實現,本文分析兩個更加普遍的函式,這就是strcpy以及me...
strcpy以及memcpy的實現
上過大學的計算機系的莘莘學子們,遺憾啊,在國產的教科書的惡臭的薰陶下,四年的青春流逝,悲哀啊!很幸運在大學中有很多研究gnu的人,這些人是幸運的,在學會了hello world之後就和國產教科書分道揚鑣了。前面的文章分析了strstr的各種實現,本文分析兩個更加普遍的函式,這就是strcpy以及me...
關於strcpy原始碼分析
注意到乙個帖子 strdest strsrc 0 哪兒前輩可以解釋下裡面具體執行的步驟呢?對於這樣的表示式,我們通常會有這樣三種看法 1.這種寫法不但沒有錯誤 當然也沒有bug 而且寫法緊湊。2.這種寫法雖然沒有錯誤,但是不夠直觀,理解起來有點麻煩,可能還會導致理解錯誤。3.這種寫法中存在未定義的地...