簡體   English   中英

Malloc 分配字符串的確切大小

[英]Malloc to allocate the exact size of a string

使用malloc分配字符串確切大小的最佳方法是什么?

我測試過

malloc((strlen(str) * sizeof(char));

當我嘗試將相同的字符串復制到分配的區域時它不起作用,但以下工作:

malloc((strlen(str) + 10) * sizeof(char));

如果我嘗試使用 +1 或 +10,它是否也能正常工作? 為什么不能只是字符串長度?

還:

char str[100] = "string!";
malloc(sizeof(str));

這個分配多少memory? 它會根據字符串數組的大小(100)還是長度(7)進行分配?

C 中的字符串需要以 NUL 結尾,即字符串的最后一個字符后面總是有一個\0字符。 所以像"apple"這樣的長度為 5,但總共包含6 個字符,包括終止符。 strlen() function 返回字符串的長度,即終止符之前的字符數,因此如果要計算在 memory 中存儲字符串所需的實際最小大小,則需要在返回的值上加 1 strlen()

為字符串分配空間的正確方法是:

malloc(strlen(str) + 1);

順便說一句,如果你想簡單地復制一個字符串, strdup() function 正是為你做的,它比手動malloc + memcpy / strcpy更容易使用。


char str[100] = "string;";的情況下您定義的數組的大小是100 前 7+1 個字符使用字符串文字的內容(7 個字符加上終止符)進行初始化,但該數組仍然是 100 個元素的數組。 所以sizeof(str)這里返回100malloc()調用分配了100個字節。

要知道字符串的結尾,必須有一個結束標記。 那是'\0' 所以當你寫作時——

char str[100] = "string!";

它是這樣保存的- 在此處輸入圖像描述

所以你需要比strlen(str)給你的字符多 1 個字符。 sizeof(str)正在工作,因為它給出了您聲明的 100 大小字符數組的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM