다중 포인터 (3중 포인터)
포인터 를 다루다 문자열 관련하여서 사용할 일이 빈번하다 보니 자연스레 2중포인터 를 다루게되더라
그러다 최근에 3중포인터를 활용하여 가변적인 문자열 배열을 사용하는 방법을 알게 되었습니다.
정적 변수의 할당은 좀더 사용하기는 편합니다. 그런데 사용함에 있어서 크기가 부족하게 되면 사용하다 코딩을 수정하고
재 컴파일 하여 프로그램을 새롭게 만들어야 되니 무척이나 불편함을 느끼게된다.
즉 가변적인 데이터는 포인터 변수로 관리해야 함을 느끼면서 알아보다 아래 사용법을 알게 됬습니다.
우선 메인함수 입니다.
int main()
{
int i,len;
char **list = NULL;
char msg[1024];
memset(msg,0,sizeof(msg));
point_malloc(&list);
for (i = 0; i < 10; i++) {
printf("%s\n",list[i]);
}
return 0;
}
char **list = NULL; 아라 선언된 곳이 보입니다. 이 list 변수가 문자열 리스트를 가변적으로 저장하려교 선언한 포인터 입니다.
필요에 따라 문자열을 추가할수 있게 할 수 있는 부분입니다.
char *ko_str[] = {
"I LOVE TEA",
"KOREA",
"ENGINE",
"papa",
"lock",
"UnLock",
"Hack",
"Ping",
"NetWork",
"Note",
"En"
};
문자열 리스트에 저장할 문자열 입니다.
void point_malloc(char ***p_path)
{
int i ,len;
char **p_tmp = NULL;
p_tmp = (char**)malloc(sizeof(char)*10);
for (i = 0; i < 10; i++) {
p_tmp[i] = (char*)malloc(sizeof(char)*1024);
len = strlen(ko_str[i]);
memcpy(p_tmp[i],ko_str[i], len);
}
*p_path = p_tmp;
}
이제 실제로 전달발은 2중포인터 변수의 주소값으로 문자열 배열을 넣는 부분입니다.
void point_malloc(char ***p_path) 2중포인터의 주소를 전달 받았기에 3중 포인터 로 인자값이 선언되어 있습니다.
p_tmp = (char**)malloc(sizeof(char)*10); 부분은 10개의 문자열을 저장할 변수를 할당
p_tmp[i] = (char*)malloc(sizeof(char)*1024); 1개의 문자열 길이를 1024만큼 할당
즉 10개의 문자열 변수는 각각 1024 만큼의 길이만큼 저장가능하게 만들었습니다.
즉 추후에 realloc 함수를 이용하여 추가적으로 문자열을 늘려서 사용할수 있으니 참신한 코딩 기법으로 글을 올려봅니다.