본문 바로가기

Architecture for Software/C and C++

C 언어의 문자열 리터럴(String Literal)

평소 C나 C++는 자주 사용하지 않지만 간혹 사용할 경우가 많아서 최근 개념을 다잡고자 "Pointers on C"라는 책을 읽고 있습니다.

Java의 경우 String이 지원되지만 C에서는 문자열 타입은 존재하지 않는다.
하지만 문자열 리터럴(String Literal)은 존재한다.

리터럴(Literal)이란 소스코드를 컴파일 할 경우 정의되어 있는 내용을 그대로 정확하게 해석할 수 있어야 하는 값이다.

만약 소스코드에 int x = 12; 라고 정의하였다면 "x"는 변수이며 "12"가 리터럴이다.
중요한 것은 리터럴은 명칭이 아니고 값 그 자체를 의미한다.

char *message = "Hello World";

여기서 "Hello World"가 리터럴이 된다.
문자열이나 숫자와 같은 값들이 모두 리터럴이라는 것은 인식하자.

이에 관한 자세한 내역은 http://www.gavilan.edu/csis/languages/literals.html 를 참고하기 바란다.

사실 C에서 문자열(string)은 NUL 바이트로 끊나는 0개 이상의 문자를 말하며 이 문자열은 대부분 문자 배열로 저장된다. 따라서 특별하게 문자열 타입이라는 것이 따로 존재하지 앟는다.

NUL이 문자열의 종료를 나타내는데 사용되기 때문에, 문자열은 반드시 하나의 NUL을 포함하여야 한다.
이렇게 NUL이 문자열의 종결자(terminator)로 사용될 수 있는 이유는 대부분의 문자열 처리에서 NUL이 별로 무제되지 않으며, 문자열 출력과도 상관없기 때문이다.

문자열 리터럴은 일련의 문자들을 다음과 같이 인용부호로 묶어서 작성한다.

"Hello World"; // 조금은 지겹기도 합니다. :)