맨위로

C PROGRAMMING - 기초2012. 5. 26. 13:37

안녕하세요? 이번 강의에서는 C언어의 문자배열에 대해서 알아보도록하겠습니다. 지난번글에서 배열에 대해알아보았으며 이번 시간에는 배열중에서 가장 많이 사용되는 배열인 문자배열에 대해서 알아보도록하겠습니다. 문자배열을 알기위해 한가지 프로그램을 통해서 알아보도록 하겠습니다. 이번글에서는 문자배열을 어떻게 사용하는지에 대해서 아는것을 목표로 하겠습니다. 먼저 글을 시작하기 전에 이블로그에 와주신 모든분들께 감사의 말씀드립니다. 이제 본격적으로 C언어 문자배열에 대해서 알아보도록하겠습니다. 


문자배열            


오늘 문자 배열을 알아보기위해 살펴볼 프로그램은 다음과 같습니다. 이프로그램을 통해서는 문자 배열만을 중점으로 살펴보도록하겠습니다. 더자세한 배열은 글이 진행되면서 집중적으로 배열을 다루는 부분에서 알아보도록 하겠습니다. 

                                                                            

#include <stdio.h>

#define MAXLINE 1000

int getline(char line[], int maxline);

void copy(char to[], char from[]);

main()

{

      int len;

      int max;

      char line[MAXLINE];

      char longest[MAXLINE];

      max = 0;

      while ((len = getline(line,MAXLINE)) >0)

      if (len > max){

              max = len;

              copy(longest, line);

              }

              if (max > 0 )

              printf("%s",longest);

              return 0;

}

int getline(char s [],int lim)

{

    int c, i;

    for(i = 0; i<lim-1 && (c=getchar()) !=EOF && c!='\n'; ++i)

    s[i] = c;

    if (c == '\n'){

          s[i] = c;

          ++i;

          }

          s[i] = '\0';

          return i;

}

void copy(char to[],char from[])

{

     int i;

     i = 0;

     while ( (to[i] = from[i] ) != '\0')

     ++i;

}


위의프로그램은 여러 행을 읽어 긴행을 출력하는 프로그램입니다. 이 프로그램의 흐름은 다음과 같습니다.

while(읽을 행이있는 동안)

if(지금 읽은 행이 전에 읽은 행보다 길이가 길면 그행을 저장후 출력)

프로그램에서 행을 읽는것, 길이비교 등을 함수로 만들었고 main 함수로 전체를 관리하고있다. 그럼이제 각 기능을 하는 함수들을 한번 살펴보도록 하겠습니다. 먼저 한행을 읽어들이는 함수를 알아보도록하겠습니다. 함수의 코드는 다음과 같습니다. 

int getline(char s [],int lim)

{

    int c, i;

    for(i = 0; i<lim-1 && (c=getchar()) !=EOF && c!='\n'; ++i)

    s[i] = c;

    if (c == '\n'){

          s[i] = c;

          ++i;

          }

          s[i] = '\0';

          return i;

}

이 프로그램에서 한줄을 읽어들이는 함수는 getline 이라는 이름이다. getline 함수는 getchar 함수를 이용해서 행의 길이를 알아내고 있으며 끝에 도달하게되면 0의 값을 내주어서 끝에값을 도달했는지 안했는지 알수있게 해준다. 그러면 getline 함수의 코드를 몇줄 살펴보도록 하겠습니다.

int getline(char s [],int lim)

getline 함수를 보면 매개변수의 첫번째는 배열로,두번째는 정수로 되어있습니다.  여기서 첫번째 매개변수를 보면 배열의 길이가 정해져있지 않고 있는것을 알수있습니다. 이렇게 된이유는 배열의 길이가 main 함수에서 정해지기 때문입니다. 그럼 다음 코드를 살펴보도록 하겠습니다.

{

    int c, i;

    for(i = 0; i<lim-1 && (c=getchar()) !=EOF && c!='\n'; ++i)

    s[i] = c;

    if (c == '\n'){

          s[i] = c;

          ++i;

          }

          s[i] = '\0';

          return i;

}

다음부분은 getline 함수의 기능을 하는부분이다. 한행을 읽어 문자배열로 만드는것을 합니다. 여기서 배열의 끝에 \0 (NULL) 문자를 넣어줍니다. 예를 들어 STIH\n 행을 문자배열로 만들게 되면 다음과 같이 NULL문자가 추가됩니다.


 S

\n  \0 

다음과 같이 NULL 문자를 추가해서 만들어진 문자를 main 함수에서 출력할때에는 %s(문자열)로 형식을 지정해서 출력하게 된다. 문자배열에 NULL문자를 추가한후 만들어지니 저장할때에도 (copy 함수를 이용할때) \0이 문자배열처럼 끝에 붙어서 기록된다는것을 알수있다. 이를 이용해서 문자의 한계값보다 긴값을 만났는지 판단할수 있다. 


마치며


지금 까지 문자배열에대해서 알아보았습니다. 이글에서 문자배열이 어떤식으로 사용되는지만 알아두시면 됩니다. 자세한 배열은 글이 진행되면서 집중적으로 다루게 될것이니 이번글은 가볍게 읽어주시기 바랍니다. 

01234567


'C PROGRAMMING - 기초' 카테고리의 다른 글

C언어 - 자료형(Data Type)과 변수,연산자,수식 그리고 상수  (1) 2012.08.25
C언어 - 외부변수  (0) 2012.06.07
C언어 - 문자 배열  (0) 2012.05.26
C언어 - 매개변수값 전달  (0) 2012.04.22
C언어 - 함수  (0) 2012.04.21
C언어 - 배열  (6) 2012.03.01

Posted by STIH

댓글을 달아 주세요