39.4 배열 형태의 문자열에서 인덱스로 문자에 접근하기

배열에 문자열을 저장한다면 당연히 인덱스로 접근할 수 있겠죠? 다음 내용을 소스 코드 편집 창에 입력한 뒤 실행해보세요.

string_array_element.c

#include <stdio.h>

int main()
{
    char s1[10] = "Hello";    // 크기가 10인 char형 배열을 선언하고 문자열 할당

    printf("%c\n", s1[1]);    // e: 인덱스 1(두 번째)의 문자 출력
    printf("%c\n", s1[4]);    // o: 인덱스 4(다섯 번째)의 문자 출력
    printf("%c\n", s1[5]);    // 문자열 맨 뒤의 NULL(\0) 출력. NULL은 화면에 표시되지 않음

    return 0;
}

실행 결과

e
o

s1[1]처럼 배열을 인덱스로 접근했고, printf에서 서식 지정자 %c로 문자를 출력하였습니다. 이렇게 배열을 인덱스로 접근하면 char와 같기 때문에 %c로 출력할 수 있습니다.

마찬가지로 배열에 저장된 문자열도 맨 뒤에는 NULL이 저장되어 있습니다.

배열 형태의 문자열은 인덱스로 접근하여 문자를 할당할 수 있습니다.

string_array_element_assign.c

#include <stdio.h>

int main()
{
    char s1[10] = "Hello";    // 크기가 10인 char형 배열을 선언하고 문자열 할당
                              // 배열에 문자열이 복사됨

    s1[0] = 'A';              // 문자 배열의 인덱스 0에 문자 A를 할당

    printf("%s\n", s1);       // Aello: 바뀐 문자열이 출력됨

    return 0;
}

실행 결과

Aello

"Hello"가 들어있는 문자 배열 s1의 인덱스 0에 'A'를 할당하여 "Aello"가 되었습니다. 배열 형태의 문자열은 인덱스로 접근하여 내용을 변경할 수 있습니다. 왜냐하면 char s1[10] = "Hello";은 배열에 문자열이 모두 복사되기 때문입니다.

지금까지 문자열에 대해 배웠는데 문자열 포인터도 있고 문자 배열도 있어서 조금 복잡했을 겁니다. 일단 문자열은 포인터로도 사용할 수 있고, 배열로도 사용할 수 있다는 점만 기억하면 됩니다.