@@ -120,5 +120,87 @@ int main(void){
120120
121121
122122
123- ## 8.2 최대값/최소값
123+ ## 8.2 문자열의 배열
124124
125+ **문자열은 본래 `char` 형 배열이다.** 그리고 **문자열의 끝은 `\0`(NULL 문자)** 이다.
126+
127+
128+
129+ ### 8.3.1 문자열의 기본 구조
130+
131+ 다음 예제는 문자열의 본질이 배열임을 설명하는 코드이다.
132+
133+ ```c
134+ // arraystring01.c
135+ #include <stdio.h>
136+
137+ int main(void){
138+
139+ // 배열 각 요소의 값을 하나씩 기술하는 방식으로 초기화
140+ int aList[5] = { 30, 40, 10, 50, 20 };
141+ char szBuffer[6] = { 'H', 'e', 'l', 'l', 'o', '\0' };
142+
143+ // 문자열 형태로 문자집합을 기술하는 방식으로 배열 초기화
144+ char szData[8] = { "Hello" };
145+
146+ // 문자열 상수를 가리키는 포인터 변수 선언 및 초기화
147+ char *pszBuffer = "Hello";
148+
149+ // 문자열은 모두 같은 방식으로 출력
150+ puts(szBuffer);
151+ puts(szData);
152+ puts(pszBuffer);
153+
154+ return 0;
155+ }
156+ /* 출력결과
157+ Hello
158+ Hello
159+ Hello
160+ */
161+ ```
162+
163+ 아래의 그림은 위의 코드에서 문자열 배열의 논리적 메모리 구조를 나타낸 것이다.
164+
165+ ![ ] ( ./images/string.png )
166+
167+
168+
169+ 원래 ` "Hello" ` 라는 문자열을 풀어서 표시하면, ` 'H', 'e', 'l', 'l', 'o', '\0' ` 이다. 문자상수 하나하나를 일일이 표기하려면 매우 번거롭기 때문에 보통은 문자열(` "Hello" ` )로 표기한다.
170+
171+
172+
173+ ### 8.3.2 문자열의 끝이 ` '\0' ` 인 이유
174+
175+ [ 독하게 시작하는 C 프로그래밍] 의 저자이신 최호성님의 전적인 사견임을 책에서도 밝혀 놓았듯이 명확한 정답은 있는 듯 하진 않지만, 공부하는 입장인 나로써는 충분히 일리가 있는 설명인듯하다.
176+
177+ 다음 예제는 사용자로부터 영문이름을 입력받아 문자열의 길이를 출력하는 코드이다.
178+
179+ ``` c
180+ // arraystring02.c
181+ #include < stdio.h>
182+
183+ int main (void){
184+
185+ char szBuffer[32] = { 0 };
186+ int nLength = 0;
187+
188+ // 이름을 입력받아 배열에 저장한다.
189+ printf("Input your name : ");
190+ gets(szBuffer);
191+
192+ // 배열의 시작부터 '\0'가 나올 때까지 계속 다음으로 넘기고 확인한다.
193+ while(szBuffer[nLength] != '\0')
194+ nLength++;
195+
196+ // 이름과 문자열의 길이를 출력한다.
197+ printf("Your name is %s(%d).\n", szBuffer, nLength);
198+ return 0;
199+ }
200+ /* 출력결과
201+ Input your name : cjh
202+ Your name is cjh(3).
203+ * /
204+ ```
205+
206+ 위의 코드에서 만약에 문자열 안에 `'\0'` 이 들어있지 않다면 무한루프가 발생할 수 있다. 하지만, 문자열의 끝에는 항상(?) `'\0'`이 들어 있으므로 위의 코드는 에러없이 동작한다.
0 commit comments