этот размер для использования в malloc () правильно? - PullRequest
0 голосов
/ 15 марта 2012

Предполагая, что у меня есть char **, где каждое значение может иметь char *, и мне нужно хранить больше байтов для символьного тэминатора (NULL), как мне вычислить этот размер? может быть ..: sizeof(char *) * strlen(src) + sizeof(NULL) или только + 1 вместо sizeof(NULL)? Я надеюсь, что это понятно для вас. Заранее спасибо.

1 Ответ

1 голос
/ 15 марта 2012

A char ** - указатель на указатель на первый символ строки. В вашем примере память для указателя char **out уже выделена в стеке. Вам нужно выделить память для массива символов (строка C), на который out указывает в куче. То есть вы могли бы сделать что-то вроде:

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

Теперь вы можете (например) безопасно вернуть out и передать управление памятью, выделенной вызывающей стороне.

Если вы хотите вернуть указатель на первый элемент массива строк (другой способ интерпретации символа **), вам сначала нужно выделить в куче достаточно памяти для каждой строки:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...