본문 바로가기
  • 부자가 될 남자
프로그래밍/C

[C언어] 배열 - 문자 vs 문자열

by ㅍ우주 2023. 5. 16.

문자

문자는 배열에 넣지 않고, 변수에 넣어 보관이 가능하다.

#include <stdio.h>
int main (void) {
    char c = 'a';
    printf("%c\n", c);
}

결과값으로 a가 출력된다.


문자열

반면, 문자열은 배열에 넣어 보관해야한다.

 

#include <stdio.h>
int main (void) {
    char str[6] = "coding";
    printf("%s", str);
}

잘 된다.

 


참고

C 언어에서 문자열을 배열에 저장할 때, 문자열의 길이에 대해 약간의 혼동이 있을 수 있습니다. 문자열의 길이가 n일 때, 배열을 n칸으로 만들어도 문제가 없을 수 있지만, 이는 문자열이 반드시 NULL 종료 문자('\0')를 포함한다는 가정하에 성립합니다.

C 언어에서 문자열은 문자들의 배열로 표현됩니다. 문자열의 끝을 나타내기 위해 NULL 종료 문자가 사용됩니다. 따라서 문자열의 길이가 n인 경우, 실제로 저장해야 하는 문자의 개수는 n+1입니다. n번째 인덱스에는 NULL 종료 문자('\0')가 들어가야 하기 때문입니다.NULL 종료 문자를 생략하면 문자열이 정상적으로 동작하지 않을 수 있습니다.

 

#include <stdio.h>
int main (void) {
    char str[] = "coding";
    printf("%d", sizeof(str));
}

sizeof 함수란 매개변수로 넘어온것의 메모리 크기를 알려주는 함수입니다. sizeof함수를 배열에 적용시키면, 배열의 길이를 알 수 있습니다.

 

위의 코드를 실행시키면, 배열 str의 길이는 6칸이 아닌 7칸이 나옴을 알 수 있습니다. 그 이유는 바로 문자열의 끝에 끝을 알려주는 \0(NULL 종료문자)가 있기 때문이겠지요.


번외

배열에 저장되는 문자가 영어냐 한글이냐에 따라 byte의 크기가 달라진다

영어 1글자 : 1byte

한글 1글자 : 2byte