기타 강좌

3-5-다.문자열

문자열(String)은 일련의 문자가 연속되어 있는 것이며 문자의 집합이 곧 문자열이다. 사람의 이름이나 에러 메시지 등과 같은 일반적인 문장을 문자열이라고 한다. 문자열 상수는 문자 상수와 달리 겹따옴표로 감싸서 표현한다.

 

"Korea", "문자열"

 

문자 상수는 홑따옴표로 표현하는데 비해 문자열 상수는 겹따옴표를 사용함을 분명히 구분해야 한다. 'S'와 "S"는 비슷해 보여도 내부적으로 엄청난 차이가 있다. 'S'는 S라는 문자 하나만을 표현하지만 "S"는 한 글자로만 된 문자열이다.

문자열 상수는 있지만 이런 문자열을 저장할 수 있는 문자열 타입이라는 것은 없다. 베이직이나 파스칼, 자바같은 언어는 별도의 문자열 타입을 제공하지만 C언어는 별도의 문자열 타입을 제공하지 않는다. 왜냐하면 문자열이란 문자형 변수의 배열로 표현할 수 있고 포인터와 함께 사용하면 훨씬 더 유연하게 활용할 수 있기 때문이다.

그러나 처음 배우는 사람에게 문자열 변수가 없다는 것은 상당히 불편한 점이다. 그래서 C보다 상위 언어인 C++은 string이라는 클래스를 제공하며 MFC 라이브러리에도 CString이라는 문자열 클래스가 정의되어 있다. 다음 코드는 str이라는 이름으로 문자 배열을 선언하고 이 배열에 "Korea"라는 문자열 상수를 저장한다.

 

char str[6]="Korea";

 

이 선언문에 의해 메모리에 다음과 같은 기억 공간이 할당되고 초기화된다.

배열이란 같은 타입의 변수를 모아 놓은 것이며 문자 배열이란 문자형 변수 여러 개가 연속적으로 배치되어 있는 것이다. 그림에서 각 격자는 1바이트의 문자들이며 각 격자에 문자 하나씩이 들어있다. 제일 끝에 있는 는 여기가 문자열의 끝임을 알리는 역할을 하며 널 종료 문자라고 한다. 메모리는 연속적인 공간이기 때문에 그 끝을 명확히 표시해야 한다.

문자열 상수를 쓰면 컴파일러가 상수의 끝에 널 종료 문자를 자동으로 붙여 준다. 그래서 "Korea"라는 다섯 글자를 저장하기 위해서는 널 종료 문자의 길이까지 고려하여 배열 크기를 6으로 선언해야 한다. 문자열을 화면으로 출력할 때는 printf 함수의 %s 서식을 사용하거나 아니면 puts같은 좀 더 간단한 함수를 사용한다.

문자열 상수내에서도 확장열을 모두 사용할 수 있다. 단, 문자 상수와는 다른 차이점이 한가지 있는데 홑따옴표는 그대로 써도 되나 겹따옴표는 반드시 확장열로 표기해야 한다는 점이다. "Let's go" 이런 문자열 상수를 쓸 수 있지만 "say "go" now" 이런 문자열 상수는 쓸 수 없다. 문자열 상수 표기에 겹따옴표를 사용하기 때문에 "say "go" now"와 같이 문자열 내의 겹 따옴표는 확장열로 표기해야 한다. 마찬가지 이유로 홑따옴표를 사용하는 문자 상수의 경우는 ' ' '가 안되며 ' " '는 가능하다.

문자열은 굉장히 기본적인 타입이지만 C언어는 별도의 문자열 타입을 제공하지 않고 배열로 문자열을 표현하도록 되어 있다. 그래서 문자열을 자유 자재로 다루려면 배열에 대해 익숙해져야 한다. 배열과 문자열의 관계는 다음에 배우기로 하고 여기서는 문자열은 문자 배열로 기억한다는 것과 문자열 상수의 표기법 정도만 알아 두고 넘어가도록 하자.

TAG •

List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 912
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 798
C언어 같은 그림 찾기를 구현 1 정체불명 2012.01.19 2608
C언어 푸쉬푸쉬 data structure.h 의 내용 file 정체불명 2012.01.25 2599
C언어 [ - Zennys - ] 제니스의 C언어 예제ㅡ 2 file 제니스 2009.06.13 2595
C언어 [비쥬얼 C++ 동영상 강좌] 13회 트리 구조 리스트 CTreeCtrl 클래스 아방스 2009.01.12 2592
C언어 [C언어] printf()함수에 대해 [Dark].Angel 2009.01.14 2583
C언어 소코반 리팩토링 푸쉬푸쉬 file 정체불명 2012.01.25 2575
C언어 락발라드 구구단~ file 정체불명 2009.05.02 2565
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [열거형,정의] 제니스 2009.06.13 2558
C언어 [C언어] 배열에 대해 1 [Dark].Angel 2009.01.14 2505
C언어 [C언어] 이스케이프 시퀸스 [Dark].Angel 2009.01.14 2472
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [확장열] 제니스 2009.06.13 2472
C언어 같은그림찾기 구현 2 초기화 정체불명 2012.01.19 2405
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [정수의 길이] 1 제니스 2009.06.13 2395
C언어 [C언어] 상수에 대해 1 [Dark].Angel 2009.01.14 2383
C언어 제니스가 올린 글 출처 알았네요.... 2 제네시스& 2009.06.27 2383
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [scanf함수] -Zennys- 2009.06.13 2377
C언어 func.h함수소개 정체불명 2012.01.25 2357
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [3중문자] 1 제니스 2009.06.13 2352
C언어 알았습니다..그럼 게시물은 다 삭제해버리겠습니다.. 8 제니스 2009.06.16 2278
C언어 같은 그림맞추기 구현 체크와 엔딩 정체불명 2012.01.19 2255
Board Pagination Prev 1 2 3 4 5 Next
/ 5