본문 바로가기
C

문자열

by stdlib.h 2016. 3. 28.

문자열이란, 말 그대로 문자들의 나열을 뜻한다.

문자열을 영어로 string 이라고 하는데, 이는 실이란뜻으로 문자들이 실처럼 이어져있기 때문이다.

컴퓨터는 문자열을 저장할때, 문자들의 배열, 즉 char형 변수의 배열로 저장한다.


만약 arr이라는 char형 배열에 문자열 "ab"를 저장한다면 다음과 같다.

이전에 설명하였듯, 문자를 저장한다는 것은 그 문자에 해당하는 아스키코드값을 저장한다는 것이다.

이를 어떻게 생각하던 프로그래머의 마음이다.



그런데 만약, 우리가 이 문자열을 출력한다면 이 문자열은 길이가 어느정도이다, 라고 컴파일러에게 알려줘야 할 것이다.

이상적인 상황으로는 컴퓨터가 알아서 해줬으면 좋겠지만, 어떠한 조치가 없다면 문자는 '2문자일거야.' 라고  컴퓨터에게 알려주어야 한다.


문자열은 말 그대로 문자들이 뭉친것이기에, 그값을 따로따로 쓸일은 거의 없다.

때문에, 문자열 전체를 출력하는 경우가 많은데 사용할때 마다 그 길이를 알아야한다면 매우 불편할것이다.


그래서, 이를 방지하기 위해 문자열의 끝에 아스키코드값으로 0을 가지는 NULL문자를 넣었다.

(arr[2] 의 0 이 그 예이다.)

이는 \0 으로 나타내기도 한다.

문자열의 끝에 NULL문자를 넣음으로써 여기까지가 문자열이다. 라고 컴퓨터에게 알려준다.

'0'과는 다르다. '0'은 아스키코드값 48이기 때문이다.


때문에 문자열 배열을 선언할때 넣을 문자열의 수보다 한칸 더많이 선언해야 NULL문자까지 넣을 수 있다.


문자열은 다음과 같이 여러 방법으로 선언할 수 있다.


char arr[3] = {'a', 'b', '\0'};

char arr[3] = {"ab\0"};

char arr[3] = "ab";

문자열또한 배열이므로 arr[0] ='b' 이런식으로 값을 하나씩 바꿀 수도 있다.


문자열의 이름은 상수포인터값이다.


때문에 그 주소로부터 NULL문자가 있는곳까지 출력하는것이다.


printf 함수로 문자열을 출력할때는 %s 를 이용하며, 출력예시는 다음과 같다.

char arr[3] = "ab";

printf("%s", arr);


이렇게 출력하면, ab 가 출력된다.



지금까지 문자열은 char형 배열으로 받을 수 있다고 설명하였지만, 또다른 방법이 있다.


캐릭터형 포인터로 선언하는것인데, 선언은 다음과 같다.



char *str = "abcdefg";


캐릭터형 포인터와 캐릭터형 배열의 차이점은,


캐릭터형 포인터는 abcdefg가 저장된 주소를 가르키는것이고,


arr[] = "abcdefg"; 는 abcdefg 를 복사해와서 저장하는것이기 때문이다.

char arr1[] = "abcdefg";

char arr2[] = "abcdefg";

char *str = "abcdefg";

char *str2 = "abcdefg";

와 같은 상황일때, 

if(str == str2)

printf("1");

else

printf("2");

라는 코드가 있을때 1이 출력되고,


if(arr == arr2)

printf("1");

else

printf("2");

일때 2가 출력된다.

'C' 카테고리의 다른 글

이진탐색  (0) 2016.03.28
선택정렬 & 버블정렬  (0) 2016.03.28
과제  (0) 2016.03.28
배열 array  (0) 2016.03.28
ASCII 아스키코드  (0) 2016.03.28