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