char
은 1바이트 크기의 자료형 입니다. 숫자(정수형)인데 어떻게 문자를 사용할 수 있을까요?
숫자를 글자에 대응시키는 방식으로 문자를 사용하고 있습니다.
알파벳 'a'는 97이라는 숫자와 대응됩니다. 이를 아스키 코드
라고 합니다.
#include <stdio.h>
int main()
{
char ch = 'a';
printf("%d\n", ch); // a 와 매칭되는 97 출력
printf("%c\n", ch); // a 출력
return 0;
}
#include <stdio.h>
int main()
{
char ch = 'ab';
printf("%d\n", ch); // b와 매칭되는 98 출력
printf("%c\n", ch); // b 출력
return 0;
}
char
자료형은 1바이트로 한 글자만 담을 수 있어서 ab중에서 마지막 글자 b만 ch변수에 담깁니다. 출력하면 숫자 98과 b가 출력됩니다.
#include <stdio.h>
int main()
{
char ch[5] = "abcd";
printf("ch 는 %s", ch);
return 0;
}
한글자를 출력할때는 %c
를 사용했지만 여러 글자가 담긴 문자열을 출력할때는 %s
를 사용합니다.
배열의 크기가 4글자인데 5만큼 차지하고 있습니다. 실제로 컴퓨터가 인식할때에는 얼마만큼 길이를 출력하는지 알려줘야하는데 그것을 일일이 해주기에는 번거롭기 때문에 컴퓨터는 남는 자리에 0
,NULL
,\0
를 넣어줍니다. 이 종료 문자를 통해서 어디까지 출력할 것인지를 컴퓨터에게 알려주게되어 정상출력 됩니다.
#include <stdio.h>
int main()
{
char ch[7] = { 'a', 'b', 'c', 'd', 0, 'e', 'f' };
printf("ch 는 %s", ch); // abcd
return 0;
}
위 코드는 abcd가 출력이 됩니다. 문자열에 값을 대입하려면 선언할 때 바로 값을 넣어줘야합니다.
선언 이후에 값을 대입하면 오류가 나고 선언한 이후에 값을 넣으려면 인덱스별로 하나 하나 저장해야 합니다.
문자나 문자열을 입력받는 것은 문자열 선언 이후에 해도 상관이 없습니다.
#include <stdio.h>
int main()
{
char ch;
printf("한 글자만 입력해주세요 : ");
scanf("%c", &ch); // 입력 값 : abc
printf("%c", ch); // 출력 : a
return 0;
}
한 글자만 입력
하는 경우 1개를 초과해서 입력하게 되면 처음 글자만
변수에 담기게 됩니다.
abc 를 저장하려고 했다면 a만 저장됩니다.
#include <stdio.h>
int main()
{
char ch[201];
printf("200 자 이내로 입력해주세요 : ");
scanf("%s", ch); // & 표시 없이 scanf 입력받기
printf("%s", ch);
return 0;
}
보통 scanf
를 사용해서 값을 입력 받을 때 &
를 꼭 붙여주었습니다.
하지만 문자열 배열
의 경우에는 배열의 이름은 주소를 담고 있기
때문에 &
를 안붙여도 됩니다.
#include <stdio.h>
int main()
{
char ch[30];
scanf("%s", &ch); // goorm
int i;
for(i = 0; ch[i] != NULL; i++){
// i가 ch의 인덱스를 돌다가 NULL 값이 되면 멈추고 그 숫자를 표시해주는것
}
printf("%d", i); // 5
return 0;
}
반복문으로 i가 인덱스를 돌다가 조건문(ch[i] != NULL)을 만족하는 값을 만나면 for문이 중지되어서 그 i값이 얼마인지 확인이 가능합니다. 다른 방법으로는 for문이 돌때마다 값을 카운트해주는 변수를 지정해서 확인해도 됩니다.
#include <stdio.h>
#include <string.h> // 전처리기 <string.h> 추가
int main()
{
char input[5] = "Love";
printf("문자열 길이 : &d", strlen(input)); // 문자열 길이 : 4
return 0;
}
전처리기 <string.h> 추가하여 strlen()
함수를 이용해서 구할 수도 있습니다.
#include <stdio.h>
#include <string.h> // 전처리기 <string.h> 추가
int main()
{
char inputOne[5] = "A";
char inputTwo[5] = "B";
printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : -1
char inputOne[5] = "B";
char inputTwo[5] = "A";
printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : 1
char inputOne[5] = "A";
char inputTwo[5] = "A";
printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : 0
return 0;
}
문자열 비교하는 함수로는 strcmp
가 있습니다
인자 값중에 왼쪽의 값
이 앞에 있는 값
이라면 -1
인자 값중에 왼쪽의 값
이 뒤에 있는 값
이라면 1
인자 값이 둘다 동일
하다면0
이 출력됩니다.