这个用于malloc()的大小是对的吗?

时间:2012-03-15 00:56:32

标签: c pointers memory-management

假设我有char **,其中每个值都可以有char *,并且我需要将更多字节存储到字符终结者(NULL),我该如何计算这个大小?也许..:sizeof(char *) * strlen(src) + sizeof(NULL)或只有+1而不是sizeof(NULL)?我希望这对你来说很清楚。提前谢谢。

1 个答案:

答案 0 :(得分:1)

char **是指向字符串第一个字符的指针。在您的示例中,指针char **out的内存已在堆栈上分配。您需要做的是为out指向堆上的字符数组(C字符串)分配内存。也就是说,您可以执行以下操作:

char **out;
char *str = malloc(strlen(src) * sizeof(char) + 1);
*out = str;

现在你可以(例如)安全地返回out并传递你分配给调用者的内存的控制权。

如果你想返回一个指向字符串数组的第一个元素的指针(另一种解释char **的方法),你必须首先在堆上为每个字符串分配足够的内存:

char **out = malloc(amount_of_strings * sizeof(char *));
// Repeat the following for each string in your array...
char *str = malloc(strlen(src) * sizeof(char) + 1);
out[index] = str;