[C 기초 - 문자열 출력과 입력]

Junyeong Fred Kim·2021년 12월 6일
0

C언어

목록 보기
11/21

문자열 출력과 입력

정수와 실수 같은 숫자들만을 이용했지만, 한글, 영어와 같은 문자는 어떻게 사용할까?

자료형 정리표 링크

char은 문자와 숫자를 표현할 때 사용되는 자료형으로 1바이트의 크기이며, -128 ~ 127까지의 총 256 범위를 지니고 있다. 숫자(정수형)인데 어떻게 문자를 사용할 수 있을까에 대한 의문은 다음과 같다.

숫자를 글자에 대응시키는 방식으로 문자를 사용하고 있다. 예를 들면 알파벳 'a'97이라는 숫자와 대응된다. 이런 식으로 문자 하나 하나를 숫자에 매칭시키고 표현하는 방식이다. 이를 아스키 코드라고 한다.

위 표는 0부터 127까지의 매칭을 보여준 아스키 코드 표이다.

256이라는 제한된 숫자 때문에 유니코드(UNICODE)라는 것이 생겼다. 유니코드는 문자를 1바이트가 아닌, 2바이트로 처리하여 256배인 65,536개의 글자를 표현할 수 있다. 이건 현재까지의 여러 언어와 특수 문자를 표시하고도 2만개 가량 가짓수가 남을 정도.

#include <stdio.h>

int main()
{
  char ch = 'a';
    
  printf("%d\n", ch); // a 와 매칭되는 97 출력
  printf("%c\n", ch); // a 출력
  
  return 0;
}

출력

97
a

출력 설명

첫 번째 출력은 %d를 이용하여 'a'를 숫자로 표현했고, 두 번째 출력은 문자를 출력하는 %c를 사용하여 a가 출력된 것을 볼 수 있다. 97이 바로 'a'의 아스키 코드이다.

#include <stdio.h>

int main()
{
  char ch = 'ab';
    
  printf("%d\n", ch);
  printf("%c\n", ch);
  
  return 0;
}

출력

98
b

출력 설명

char 자료형은 1바이트로 한 글자만 담을 수 있다. ab 중 마지막으로 입력한 b만이 ch변수에 담기게 된다.


변수에 여러 글자 담기


정수형을 여러 개 담고 싶었을 때 int형 배열을 만들 듯이 여러 글자를 담고 싶다면 char형 배열을 만들어 주면 된다.

지금까지는 한글자씩 출력했기 때문에 %c를 이용했지만, 여러 글자가 담긴 문자열을 출력할 때는 %s를 사용하면 된다.

#include <stdio.h>

int main()
{
  char ch[5] = "abcd";
  
  printf("ch 는 %s", ch);
  
  return 0;
}

출력

ch 는 abcd

출력 설명

abcd가 찍히는 걸 볼 수 있지만, 배열의 크기가 4글자인데 4가 아닌 5만큼을 차지하고 있다는 것이다. 사용자가 원하는 것은 abcd 전체의 출력을 의미하는 것이겠지만, 실제로 컴퓨터가 인식할 때에는 얼마만큼의 길이인지를 알려주어야 한다. 하지만 출력할 때마다 이 배열은 4글자인지, 5글자인지 알려주는 것은 번거롭다.


그래서 마지막 남는 자리에 0, NULL, \0 등의 값을 넣어준다. 세 문자는 전부 같은 것으로 종료 문자를 가르킨다.


이 종료 문자를 통해서 어디까지 출력할 것인지를 컴퓨터에게 알려주며, 정상적으로 출력되게 된다.

#include <stdio.h>

int main()
{
  char ch[7] = { 'a', 'b', 'c', 'd', 0, 'e', 'f' };
  
  printf("ch 는 %s", ch);
  
  return 0;
}

출력

ch는 abcd

출력 설명

위 코드를 보면 abcd까지만 출력한다는 것을 알 수 있다.


한가지 주의할 점이 있는데, 문자열에 값을 대입하고 싶다면 지금까지 썼던 코드와 같이 선언할 때 바로 값을 넣어주어야 한다. 선언 이후에 값을 대입하려 하면 오류가 나는데, 만약 꼭 선언을 한 이후에 코드에서 값을 대입하고 싶다면
ch[0] = 'a';
ch[1] = 'b';
와 같이 하나하나 저장해야 한다.

문자 입력 받기


#include <stdio.h>

int main()
{
  char ch[201];
  
  printf("200 자 이내로 입력해주세요 : ");
  scanf("%s", &ch);
  printf("%s", ch);
  
  return 0;
}

출력

200 자 이내로 입력해주세요 : fredkeemhaus
fredkeemhaus

출력 설명

scanf를 사용해서 값을 입력받을 때는 &를 꼭 붙여주었습니다. 주소를 전달해야하기 때문.
하지만 문자열 배열의 경우에는 &를 쓰지 않고 그냥 변수 이름만 써주어도 된다.

profile
기억보다 기록

0개의 댓글