소프트웨어/C 언어

[C언어]27. 가장 기초적인 자료구조, 배열에 대해여 알아보자 -4- ( 문자열의 사용 )

리습 2013. 6. 28. 07:00


 안녕하십니까. 리습입니다.


 배열은 변수가 단순히 일렬로 정리되어있는 자료구조라 배웠습니다. 그런데 변수가 일렬로 정리되어있다는데에 있어서 한가지 편리한 점이 보이지 않으십니까? 문자를 일렬로 쓴다면 문장이 되듯이 배열을 이용해서  문장을 만들수 있는 것이지요. 바로 문자열 입니다.


 지금까지의 방법으로 간단한 단어 하나를 표현해보도록 하겠습니다. 우선 맨처음 배운 변수만을 이용한 방법입니다.  예시를 보죠

 코드

 #include <stdio.h>

 int main( void )

 {

     char a1 = 'a' , a2 = 'p' , a3 = 'p' , a4 = 'l' , a5 = 'e';

     printf("%c", a1);

     printf("%c", a2);

     printf("%c", a3);

     printf("%c", a4);

     printf("%c", a5);

     

     return 0 ;

}

           

 결과

  apple



apple 이라는 단어를 화면에 출력하기위해 변수를 5개나 만들어야 했으며 일일이 하나하나 출력을 써줘야 했습니다. 매우 귀찮죠. 그럼 좀더 편해지기 위해서 배열을 한번 써보도록 하겠습니다.


  코드

  #include <stdio.h>

  int main( void )

  {

        char a[5] = {'a' , 'p' , 'p' , 'l', 'e'};

        for ( int i = 0 ; i < 5 ; i++)

        {

              printf("%c", a[i]);

        }

        return 0; 

}

 결과

 apple



 이번에는 좀더 단순해졌습니다. 결과물은 같지만 출력과정에서 반복문으로 처리할 수 있었기 때문에 출력 처리가 좀더 쉬워졌습니다. 하지만 아직은 변수에 값을 일일이 넣어주어야 합니다. 이런 문장들을 하나하나 입력하는 것이 아니라 한번에 입력하면 편하겠죠. 그래서 우리가 '문자열' 을 사용하는 것입니다. 사용법은 간단합니다. " " 에 전체 문장을 입력하는 것입니다.  


 코드

 #include <stdio.h>

 int main( void )

 {

      char a[6] = "apple";

      printf("%s" , &a[0]); //나중엔 printf("%s" , a); 라고 해야 한다. 배우지 않아 바꿈.

      return 0;

}

 결과

 apple



 코드를 보시게 되면 우선 배열이 [5]에서 [6]으로 늘어 나신걸 볼실수 있습니다. 그리고 printf 에서도 출력을 할 때 평상시에 사용하던 %c 가 아닌 %s를 사용하였습니다. ( printf의 서식문자를 잊으셨다면 [C언어]07. 컴퓨터와 첫대화, 기본 입력과 출력 에 대하여 알아보자. (printf, scanf) 를 보시기 바랍니다. ) 그리고 &a[0]이란 변수값을 넣었습니다. 이것들이 모두 문자열을 출력하기 위한 장치들입니다. 하나씩 이유를 알아보도록 하겠습니다.


 문자열이라는 것은 변수하나하나에 값을 넣어주고 마지막에 문장이 끝났다는 의미에서 NULL 문자를 넣어주는 값의 집합입니다. 그림으로 나타내면 다음과 같죠

 하나씩 값을 가지고 있으며 마지막엔 NULL 문자를 가짐으로써 문자열이 여기서 끝난다 라고 명시하는 것입니다. 마치 마침표와도 같은 것입니다. 컴퓨터는 문자열을 만나면 우선 하나씩 읽기 시작해서 NULL 문자가 나오면 읽는 것을 마치게 됩니다. 문자열에서 NULL은 마지막에 꼭 표기해줘야 하기 때문에 문장을 작성할 때에도 문장 전체 길이 + 1 만큼의 배열을 만들게 되는 것입니다. 


 printf 에서 %s 는 문자열을 출력하는 서식문자입니다. 그리고 &a[0] 이라고 적어준것은 컴퓨터 내부에서 문자열을 처리할 땐 메모리 '주소값'을 사용하기 때문입니다. 첫번째 변수의 주소를 넣어 준것이지요. ( & 는 주소 연산자입니다. ) 아직은 주소값을 다루는 포인터에 대해서 배우지 않았기 때문에 자세한 설명은 나중으로 미루도록 하겠습니다. 또한 포인터를 배운 이후엔 printf("%s" , a ); 라고만 적어주면 됩니다. 


 배열을 통해 문자열을 사용하는 방법을 알아보았습니다. 문자열이 배열을 통해서만 사용할 수 있는 것은 아니지만 배열을 이용하면 가장 쉽게 사용할 수 있습니다. 문자열이 어떤 구조이고 왜 배열을 통해서 사용되는지 정확하게 이해하시고 사용하시기 바랍니다.