[英]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)
這里返回100
, malloc()
調用分配了100
個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.