본문 바로가기
프로그래밍언어/C 언어

[C 언어] char 포인터로 문자열 사용

by khsnote22 2022. 12. 9.

문자열은 주소라고 했습니다. 따라서 문자열도 char 포인터에 대입하여 사용할 수 있습니다. 문자열을 char  포인터에 대입하면 문자열에 이름을 붙여 사용할 수 있고 다른 문자열로 쉽게 바꿀 수 있습니다. 예제를 통해 포인터로 문자열을 사용하는 방법을 살펴보겠습니다. 

// 포인터로 문자열을 사용하는 방법

int main(void)
{
	char *dessert = "apple"; // 포인터에 문자열 초기화
    
    printf("오늘 후식은 %s입니다.\n", dessert); // 문자열 출력
    dessert = "banana"; // 새로운 문자열 대입
    printf("내일 후식은 %s입니다.\n", dessert); // 바뀐 문자열 출력
    return 0;
}

 

5행은 char 포인터를 선언하고 문자열 상수로 초기화합니다. 문자열은 컴파일 과정에서 별도로 보관되고 첫 번째 문자의 주소로 바뀌므로 결국 포인터에는 문자열의 시작 위치 값만 저장됩니다. 그러나 포인터 연산을 통해 얼마든지 해당 문자열 전체를 사용할 수 있습니다.

 

dessert가 가리키는 곳에는 a가 저장되어 있습니다. dessert를 1 증가시키면 다음 문자의 주소를 구할 수 있고 간접 참조 연산을 수행하면 그 문자를 사용할 수 있습니다. 따라서 dessert의 값을 증가시키면서 널 문자가 나올 때까지 문자를 출력하면 결국 문자열 전체를 출력할 수 있습니다.

printf("오늘 후식은 %s입니다.\n", dessert); // 7행, 문자열 출력

printf 함수의 %s 변환 문자는 포인터 연산으로 문자열을 출력합니다. 즉 printf 함수에서 %s 변환 문자를 사용하면 결과적으로 함수안에서 다음 코드와 같은 일이 수행합니다. 

while (*dessert != '\0') // dessert가 가리키는 문자가 널 문자가 아닌 동안
{
	putchar(*dessert); // dessert가 가리키는 문자 출력
    dessert++; // dessert로 다음 문자를 가리킨다.
}