2013-09-25 2 views
0

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

const char *containers_1[] = {"one","two","why do I stuck in this problem"}; 
const char *containers_2[] = {"Other","string","here"}; 

Так что я ищу временную переменную подходящего типа, к которой я могу скопировать один из этих контейнеров. Объявление "const char * container []" является частью кода, который я не хочу менять, чтобы сохранить формат красиво!

Спасибо за ваше время.

+0

Вы хотите скопировать контейнеры или элементы внутри контейнера? Если вы хотите «скопировать» один из контейнеров, используйте указатель. –

ответ

1

Код должен быть улучшен, но я думаю, что это то, что вы хотите.

const char *containers_1[] = {"one","two","why do I stuck in this problem"}; 
const char *containers_2[] = {"Other","string","here","whis","has","more"}; 

main(int argc, char **argv) { 

char ** tmp1; 
int i, size; 

size = sizeof(containers_1); 
printf ("%d\n", size); 
tmp1 = malloc(size); 
memcpy(tmp1, containers_1, sizeof(containers_1)); 

for (i=0; i< size/sizeof(char *); i++) { 
    printf("%s\n", tmp1[i]); 
    } 

size = sizeof(containers_2); 
printf ("%d\n", size); 
tmp1 = malloc(size); 
memcpy(tmp1, containers_2, sizeof(containers_2)); 

for (i=0; i< size/sizeof(char *); i++) { 
    printf("%s\n", tmp1[i]); 
    } 
} 
+0

Это именно то, что я хотел. Спасибо вам. И я должен освободиться после, верно? Как насчет того, отличается ли область распределения и освобождения? – Hamed

+0

Да, вы правы, вы должны освободить память после использования. Там нет проблемы с областью, tmp1 может быть глобальным, пока ваши локальные функции могут решить, был ли установлен tmp1 (инициализируется до нуля и проверяется перед распределением, нужно ли освобождать). Если вы часто выделяете/освобождаете выделение, вы можете рассмотреть вопрос о распределении max_size контейнеров_ * один раз и просто memsetting памяти до нуля, но тогда ваше условие выхода для циклов должно быть изменено, чтобы проверить нулевой указатель. –

Смежные вопросы