문자열이란, 말 그대로 문자들의 나열을 뜻한다.
문자열을 영어로 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 |