首页 > 解决方案 > malloc 分配字符串的确切大小

问题描述

如何使用 分配字符串的确切大小的最佳方法是malloc

我测试过

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

当我尝试将相同的字符串复制到分配的区域时它不起作用,但以下工作:

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

如果我尝试使用 +1 或 +10,它是否也能正常工作?为什么不能只是字符串长度?

还:

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

这分配了多少内存?它会根据字符串数组的大小(100)还是长度(7)进行分配?

标签: cmalloc

解决方案


\0C 中的字符串需要以 NUL 结尾,即在字符串的最后一个字符之后总是有一个字符。所以类似"apple"的长度为 5,但总共包含6 个字符,包括终止符。该strlen()函数返回字符串的长度,即终止符之前的字符数,因此,如果要计算将字符串存储在内存中所需的实际最小大小,则需要将 1 返回的值加 1 strlen()

为字符串分配空间的正确方法是:

malloc(strlen(str) + 1);

顺便说一句,如果您想简单地复制一个字符串,该strdup()函数会为您完成此操作,并且它比手动malloc+ memcpy/更易于使用strcpy


char str[100] = "string!";您定义的数组大小的情况下是100. 前 7+1 个字符使用字符串文字的内容(7 个字符加上终止符)进行初始化,但该数组仍然是 100 个元素的数组。所以sizeof(str)这里返回100malloc()调用分配100字节。


推荐阅读