문자형 변수 (Chracter Type)
C언어의 문자형은 char형이 있습니다. 이 char형은 1바이트의 문자를 표기할 수 있습니다. char형의 변수 선언은 아래와 같이 변수만 선언, 초기화까지, 또는 여러개의 변수를 나열하는 방식으로 진행합니다.
char 변수명;
char 변수명 = 초기화;
char 변수명1, 변수명2;
char 변수명1 = 초기화, 변수명2;
예).
char ch1;
char ch2 = 'Y';
char ch3, ch4;
char ch5 = ch2, ch6;
만약 unsigned char 변수를 선언한다면, char앞에 unsigned를 붙여줍니다.
unsigned char 변수명;
unsigned char 변수명 = 초기화;
unsigned char 변수명1, 변수명2;
unsigned char 변수명1 = 초기화, 변수명2;
ex).
unsigned char ch1;
unsigned char ch2 = 'Y';
unsigned char ch3, ch4;
unsigned char ch5 = ch2, ch6;
한 개의 문자를 화면에 출력하는 방법으로는
char ch = 'H';
printf("%c", ch);
와 같이 "%c" 형태로 변수를 mapping하면 됩니다.
문자형 상수
1. 리터럴 문자 상수
1바이트의 문자 상수를 표기하는 방법은 여러가지가 있습니다.
1-1). 작은 따옴표(')로 감싸서 표기하는 방법
예).
'A'
'B'
'0'
'1'
1-2). 숫자 형태로 표기
예).
30 // 10진수 표기 : 0 ~ 255 또는 -128 ~ 127
0xA0 // 16진수 표기 : 0x00 ~ 0xff 또는 0x00 ~ 0xFF
0xa0 // 16진수 표기 : 0x00 ~ 0xff 또는 0x00 ~ 0xFF
020 // 8진수 표기 : 00 ~ 0377
1-3). Escape Sequence 문자 (작은 따옴표 표기법 중 특수문자 표기법)
'\a' : 경고음
'\b' : 공백문자
'\f' : 새로운 페이지 (form feed)
'\n' : 새로운 라인 (line feed)
'\r' : carriage return
'\t' : Tab문자
'\v' : 수직 Tab문자
'\\' : \
'\'' : '
'\"' : "
'\?' : ?
'\0ooo': 8진수 3자리 표기의 문자코드 표현
'\xhh' : 16진 2자리 표기의 문자코드 표현
와 같이 특수 기능을 하는 문자를 표현하기 위하여 앞에 backslash를 붙여서 표기하는 방법입니다.
2. const 상수
변수선언과 비슷한 형태로 선언하며, 앞에 const를 붙여서 표현합니다.
const char VALUE = 'C';
const char NEW_LINE = '\n';
상수는 대문자로만 구성하여 변수가 아님을 표현하는 것이 일반적입니다.
3. Macro 상수
매크로 상수는 컴파일러로 컴파일하기 전에 preprocessor가 치환하는 용도로 사용합니다.
#define VALUE 'C'
#define 상수명 상수값의 형태로 ;을 붙이지 않습니다.
문자열 (String) 변수
C언어에서 문자열은 char의 배열 형태로 표현됩니다. 문자열은 0x00 또는 '\0' (NULL문자)로 끝납니다. C언어와 같이 문자열을 표현하는 것을 Null-terminated String이라는 표현을 쓰기도 합니다. 예를들면 PASCAL과 같은 프로그램 언어는 문자열 string 타입이 별도로 있고, 그 문자열에 길이를 저장하는 항목이 있습니다. 그러나 C언어는 char의 배열 형태로 표현되어 NULL문자가 문자열을 끝을 의미하는 문자로 사용됩니다. 그래서 C언어의 문자열에는 데이터의 값으로 NULL문자(0x00)를 가질 수는 있지만 그것을 문자열을 구성할 수 없습니다. (문자열의 중간에 0x00 문자가 있으면 문자의 끝으로 인식되어 문자열이 잘려버립니다.)
문자열 변수의 기본 표현 방법은 아래와 같습니다.
char 변수[크기];
char 변수[크기] = 초기화값;
예).
char str1[100];
char str2[200] = "Hello World!";
문자열 변수를 printf함수로 화면에 출력하는 경우는 "%s"를 이용하여 출력합니다.
char data[100] = "Hello World.";
printf("%s\n", data);
결과
-----------------------
Hello World.
printf( )함수로 문자열의 출력 예제).
#include <stdio.h>
int main()
{
char data[100] = "Hello World.";
printf("[%s]\n", data); // 길이 제한없이 전체 문자열 출력
printf("[%20s]\n", data); // 최소 길이 20폭으로 출력 (우측정렬)
printf("[%5s]\n", data); // 최소 길이 5 폭으로 출력 (5가 넘으면 모두 출력)
printf("[%.5s]\n", data); // 최대 길이 5 폭으로 출력 (5가 넘으면 잘림)
printf("[%.20s]\n", data); // 최대 길이 20폭으로 출력 (길이가 짧으면 길이만큼 출력)
printf("[%20.20s]\n", data); // 최소 길이 20폭, 최대길이 20으로 출력
printf("[%-20s]\n", data); // 최소 길이 20폭으로 좌측 정렬 출력
return 0;
}
결과:
---------------------------------
[Hello World.]
[ Hello World.]
[Hello World.]
[Hello]
[Hello World.]
[ Hello World.]
[Hello World. ]
문자열 상수
1). Literal 문자열 상수
리터럴 상수는 문자열의 앞뒤를 따옴표(") 표시하는 방법이며, 표현방법은 Literal 문자 상수인 작은 따옴표(')의 앞뒤로 된 부분을 제거하여 이어서 붙여 적으면 됩니다.
예).
"ABC0123"
"abc\t123\n"
"\x13\xa0"
문자열이 너무 길어서 한 라인에 표현하기 힘든 경우
char data[1024] = "There are four seasons in a year, "
"Spring, summer, fall and winter.";
처럼 따옴표 ~ 따옴표를 여러 줄 나열하면 하나의 문자열로 인식합니다.
2). const 문자열 상수 (이름있는 문자열 상수)
const 문자열 상수는 변수의 선언과 비슷하며 앞에 const를 붙이고 초기화를 합니다. 그리고 문자열의 길이는 지정하지 않습니다. 상수의 이름은 대문자만으로 구성합니다.
const char 문자열명[] = 초기화값;
예). 배열방식
const char HELLO_WORLD[] = "Hello World!";
위와 비슷하게 char *를 사용하여 표현하는 개발자들이 있는 데, 바람직하지 않습니다.
예). char * 방식
const char *HELLO_WORLD = "Hello World!";
배열방식으로 상수 선언시
const char HELLO_WORLD[] = "Hello World!";
strcpy(HELLO_WORLD, "Hi"); // 오류발생
HELLO_WORLD = "Hi"; // 오류발생
char * 방식으로 상수선언시
const char *HELLO_WORLD = "Hello World!";
strcpy(HELLO_WORLD, "Hi"); // 오류발생
HELLO_WORLD = "Hi"; // 정상적으로 데이터가 변경됨
위와 같은 문제로 인하여 상수의 기능을 할 수 없으므로 주의해야 합니다.
3). 매크로 상수
매크로 상수는 컴파일 시에 preprocessor에 의해서 상수명이 상수값으로 치환되는 방식입니다. 끝에 semicolon(;)을 붙이지 않습니다.
#define 상수명 상수값
예).
#define HELLO_WORLD "Hello World."
'C언어 > 문법' 카테고리의 다른 글
12. C언어의 연산자(operator) (2) | 2019.10.31 |
---|---|
11. 변수(變數:Variable)와 관련 총정리 (0) | 2019.10.30 |
9. 변수와 상수 (실수형) (0) | 2019.10.24 |
8. 변수와 상수 (정수형) (0) | 2019.10.23 |
7. C 프로그래밍의 시작 - 함수 (2) | 2019.10.22 |