C 動態記憶體分配實用案例(二)之複製字串

2021-08-27 21:16:18 字數 844 閱讀 2055

用動態分配記憶體製作乙個字串的乙份拷貝。注意:呼叫程式應該負責檢查這塊記憶體是否分配成功,這樣做允許程式以任何它所希望的方式對錯誤作出反應。

#nclude #include char * strdup( char const *string )

輸入被讀入緩衝區,每次讀取一行。此時可以確定字串的長度,然後就分配記憶體用於儲存字串。最後,字串被複製到新記憶體。這樣緩衝區又可以用於讀取下乙個輸入行。

上面的程式返回乙個輸入字串的拷貝該拷貝儲存於一塊動態分配的記憶體中。函式首先試圖獲得足夠的記憶體來儲存這個拷貝。記憶體的容量比字串的長度多乙個位元組,以便儲存字串結尾的nul位元組。如果記憶體分配成功,字串就被複製到這塊新記憶體。最後,函式就返回乙個指向這塊記憶體的指標。注意,如果由於某些原因導致記憶體分配失敗,new_string的值將為null。在這種情況下,函式將返回乙個null指標。

什麼時候記憶體會分配失敗呢?

對於malloc動態記憶體分配函式來說,如果記憶體池是空的,或者它的可用記憶體無法滿足你的要求時,會發生什麼情況呢?

在這種情況下,malloc函式向作業系統請求,要求得到更多的記憶體,並在這塊記憶體上執行分配任務。如果作業系統無法向malloc函式提供更多的記憶體,malloc就返回乙個null指標。因此,對每個從malloc返回的指標都應該進行檢查,確保它並非null是非常重要的。

最後,對上述函式做出乙個總結,該函式就是對輸入的字串檢查它的長度,然後動態分配記憶體,記憶體的大小是字串長度多乙個位元組,用於儲存字串結尾的nul位元組,之後,判斷動態記憶體分配是否成功,如果成功,則執行複製字串操作,對函式接收的字串複製到一塊新的記憶體中去。函式返回乙個指向該記憶體的指標。如果記憶體分配失敗,則函式返回乙個null指標。

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

c 動態記憶體分配

c語言中提供的動態記憶體分配為了解決陣列的靜態的分配方式的問題 即陣列大小必須在定義時指定,程式在執行時不能動態改變陣列的大小 在標準庫中提供了三個動態記憶體分配的函式供程式呼叫,下面將分別對這三個函式進行介紹 1.void malloc size t size malloc 在分配一段連續的記憶體...

C 動態記憶體分配

c 動態記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確...