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));
这分配了多少内存?它会根据字符串数组的大小 (100) 或其长度 (7) 进行分配吗?
C 中的字符串需要以NUL 结尾,即在字符串的最后一个字符之后总是有一个[=11=]
字符。所以类似 "apple"
的长度为 5,但总共包含 6 个字符,包括终止符。 strlen()
函数 returns 字符串的长度,即终止符之前的字符数,因此如果要计算将字符串存储在内存中所需的实际最小大小,则需要添加1 到 strlen()
.
返回的值
为字符串分配 space 的正确方法是:
malloc(strlen(str) + 1);
顺便说一句,如果你想简单地复制一个字符串,strdup()
函数就是为你做的,而且它比手动 malloc
+ memcpy
使用起来更简单/strcpy
.
在 char str[100] = "string!";
的情况下,您定义的数组大小为 100
。前 7+1 个字符用字符串文字的内容(7 个字符加上终止符)初始化,但数组仍然是一个 100 元素的数组。所以 sizeof(str)
这里 returns 100
,malloc()
调用分配 100
字节。
要知道字符串的结尾,必须有一个结束标记。即'[=11=]'
。所以当你写 -
char str[100] = "string!";
这样保存的 -
所以你需要比 strlen(str)
多 1 个字符。 sizeof(str)
有效,因为它给出了您声明的 100 大小字符数组的大小。
使用 malloc
分配字符串确切大小的最佳方法是什么?
我测试了
malloc((strlen(str) * sizeof(char));
当我试图将相同的字符串复制到分配的区域时它不起作用,但以下方法起作用了:
malloc((strlen(str) + 10) * sizeof(char));
如果我尝试使用 +1 而不是 +10,它是否也能正常工作?为什么不能只是字符串长度?
还有:
char str[100] = "string!";
malloc(sizeof(str));
这分配了多少内存?它会根据字符串数组的大小 (100) 或其长度 (7) 进行分配吗?
C 中的字符串需要以NUL 结尾,即在字符串的最后一个字符之后总是有一个[=11=]
字符。所以类似 "apple"
的长度为 5,但总共包含 6 个字符,包括终止符。 strlen()
函数 returns 字符串的长度,即终止符之前的字符数,因此如果要计算将字符串存储在内存中所需的实际最小大小,则需要添加1 到 strlen()
.
为字符串分配 space 的正确方法是:
malloc(strlen(str) + 1);
顺便说一句,如果你想简单地复制一个字符串,strdup()
函数就是为你做的,而且它比手动 malloc
+ memcpy
使用起来更简单/strcpy
.
在 char str[100] = "string!";
的情况下,您定义的数组大小为 100
。前 7+1 个字符用字符串文字的内容(7 个字符加上终止符)初始化,但数组仍然是一个 100 元素的数组。所以 sizeof(str)
这里 returns 100
,malloc()
调用分配 100
字节。
要知道字符串的结尾,必须有一个结束标记。即'[=11=]'
。所以当你写 -
char str[100] = "string!";
这样保存的 -
所以你需要比 strlen(str)
多 1 个字符。 sizeof(str)
有效,因为它给出了您声明的 100 大小字符数组的大小。