2013-09-25 3 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이 설정되었는지 (0으로 초기화하고 할당을 해제해야하는지 여부를 할당하기 전에 확인했는지 여부)를 결정할 수 있다면 tmp1은 전역 일 수 있습니다. 자주 할당/할당 해제하는 경우에는 containers_ *의 max_size를 한 번 할당하고 메모리를 0으로 설정하는 것을 고려할 수 있지만 for 루프의 종료 조건을 변경하여 0 포인터를 확인해야합니다. –