C언어에서 배열로 문자열 다루기

C언어에서 배열로 문자열을 다루는 방법을 설명합니다.

C언어는 자바나 파이썬 등과는 다르게 문자열(string) 자료형이 따로 존재하지 않습니다. 그 대신 문자(char) 자료형이 있어서 문자의 배열로 문자열을 이루게 됩니다. C++에서는 string 클래스가 있어서 문자열을 편리하게 다룰 수 있지만, 오리지널 C에서는 문자의 배열 형태로 다루게 됩니다.

다음 코드를 봅시다.

#include <stdio.h>

int main() {
    char gfriend[6][6] = {
        "Sowon", "Yerin", "Eunha", "Yuju", "SinB", "Umji",
    };
    for (int i = 0; i < 6; i++) {
        printf("Thank you %s\n", gfriend[i]);
    }
    printf("Thank you GFRIEND\n");
    printf("We will meet again.\n");
    return 0;
}

이 코드는 문자형의 2차원 배열을 선언하고 초기화한 것이며, 동시에 문자열의 1차원 배열이기도 합니다. 하나의 문자열이 곧 1차원 문자 배열이 되는 것입니다.

이 예시에서 문자 배열 gfriend의 구조를 살펴보면,

[0] [1] [2] [3] [4] [5]
gfriend[0] S o w o n \0
gfriend[1] Y e r i n \0
gfriend[2] E u n h a \0
gfriend[3] Y u j u \0 \0
gfriend[4] S i n B \0 \0
gfriend[5] U m j i \0 \0

이와 같은 구조가 됩니다. 문자열 배열에 문자들이 할당되고 남은 자리는 Null(\0) 값으로 채워집니다. 문자열의 길이(배열 크기)는 문자열의 최대 길이보다 적어도 1만큼 더 크게 선언해야 합니다. C언어에서는 문자열을 읽다가 Null 값을 만나면 문자열의 끝으로 인식합니다. 만약 끄트머리에 Null 값을 주지 않으면 문자열의 끝을 인식하지 못해서 다음 문자열과 붙어버리고, 문자열 배열의 마지막에서 끝을 인식하지 못하면 그와 인접한 쓰레기값과 붙어버리게 됩니다. 지금은 실무에서 사장되어 가는 추세인 헝가리안 표기법을 보면 sz라는 접두어가 있는데, 이것이 바로 Null 값으로 끝나는 문자열을 의미합니다.

8번 줄을 보면 서식 지정자로 %s가 있고 출력할 변수는 gfriend[i]로 되어 있습니다. 이는 gfriend[i][0]부터 시작해서 Null 값을 만나기 전까지 문자를 차례로 읽어들인 뒤 문자열 형태로 출력하라는 의미입니다.

이 코드의 결과는 다음과 같습니다.

Thank you Sowon
Thank you Yerin
Thank you Eunha
Thank you Yuju
Thank you SinB
Thank you Umji
Thank you GFRIEND
We will meet again.

답글 남기기

이메일 주소는 공개되지 않습니다.