태그 보관물: 문자열

[C] 문자열 배열과 이중 포인터

이중 포인터를 이용한 문자열 배열의 동적 할당

역시 실제로 해보지 않으면 이해가 안가는게 코딩인가보다. C에서 문자열은 배열로 표현된다. 여러 개의 문자열을 배열에 담고 싶다면 이차원 배열을 쓰면되는데, 이 경우에는 배열 요소의 크기가 모두 같으므로 메모리가 낭비될 수 있다. 보통은 다음과 같이 문자열(char 형 배열)의 주소를 가리키는 포인터 배열을 사용한다.

#include 

int main(void)
{
    char *arrs[] = {"abcdefg","afeasge","asesgfggeaweasfegasegfs","a","tiger"};
    int i;
    for(i=0;i

위 코드의 arrs[]는 문자열포인터(char 형)를 담는 배열이다. 이 배열의 각 요소에는 초기화할 때 사용한 배열의 각 문자열의 시작 번지를 저장하게 된다. 실제로 배열의 길이를 구하는 부분은 sizeof(arr)/sizeof(char*)에서 알 수 있듯이 이 배열의 각 요소의 크기는 char* 포인터의 크기(int형이므로 32비트 시스템에서는 4바이트)를 차지하게 된다.

위의 방법은 정적인 크기의 배열을 생성한 것인데, 만약 문자열의 개수가 동적이라면 포인터를 사용해 메모리를 동적으로 할당한 다음, 각각의 요소에 문자열의 시작 번지를 대입하는 방법이있다. 즉 이중 포인터를 여기서 또 사용하게 된다. 다음 코드는 문자열이중포인터 변수를 선언한 다음, 50개의 char* 를 담을 수 있는 메모리를 할당해주고, 각각에 대해 다시 문자열 만큼의 메모리를 할당하여 문자열을 집어 넣는 과정을 보여준다. 계속 읽기