проблема с символом ** в с - PullRequest
       0

проблема с символом ** в с

0 голосов
/ 26 апреля 2010

у меня есть char ** arr, который является массивом строк, и я хочу стереть 2 последние ячейки массива или, возможно, создать новый символ **, но без этих последних 2 ячеек большое спасибо.

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Как насчет того, чтобы освободить память, указанную двумя последними элементами в массиве, установить их на ноль и затем отдельно отслеживать размер массива.

Например

unsigned int len = 10;
char **aryStr = (char**) malloc(sizeof(char *)*len);
....
free(aryStr[--len])
aryStr[len] = NULL;
free(aryStr[--len])
aryStr[len] = NULL;

Вы можете использовать новый len в качестве параметра для процедур манипулирования массивом. В качестве альтернативы вы создаете дополнительное значение (sentinel) в вашем массиве, которое отмечает конец данных, указывая на NULL. Вы обрабатываете массив (как строку), перебирая его, пока не найдете значение NULL.

1 голос
/ 26 апреля 2010

Знаете ли вы размер вашего массива?

Код может быть таким, если предположить, что длина массива равна array_size:

int array_size;
char **array = malloc (sizeof (char*) * array_size); 
....
free (*(array+array_size)); *(array+array_size) = NULL;
free (*(array+array_size-1)); *(array+array_size-1) = NULL;

В случае, если вы не знаете длину, поможет тот факт, что элемент после последнего использованного элемента равен NULL.

Тогда код несколько сложнее:

for (char** ai = array; *ai != NULL; ai++);
ai--;
free(*ai); *ai = NULL;
ai--;
free(*ai); *ai = NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...