[C 문법공부] C언어 문자 변수
char
c언어에서는 정수 자료형인 char을 이용해 문자 한 개를 저장한다.
char는 1byte, 8bit만큼의 크기를 갖는 자료형이다.
따라서 범위가 -128 ~ 127까지, 256개의 숫자를 나타낼 수 있다.
/* 문자를 저장하는 변수 */
#include <stdio.h>
int main() {
char a;
a = 'a';
printf("a 의 값과 들어 있는 문자는? 값 : %d , 문자 : %c \n", a, a);
return 0;
}
a의 값과 들어있는 문자는? 값 : 97 , 문자 : a
이렇게 출력이 나오는 것을 볼 수 있다.
문자를 변수에 할당할때는, 홑문자는 작은따옴표 '
로, 문자열은 큰따옴표 "
로 묶어줘야한다.
%c
%c
라는 출력형식이 나오는데, 이 출력형식은 파라미터로
문자가 들어오면 문자 그대로를 반환
하고,
정수라면 파라미터를 ASKII 코드표에 해당하는 값에 대입해 문자로 바꿔준다.
다른 예시로
#include <stdio.h>
int main() {
char b;
b = 123;
printf("b의 값과 들어있는 문자는? 값 : %d 문자 %c :",b,b);
}
b의 값과 들어있는 문자는? 값 : 123 문자 : {
이렇게 %c는 파라미터로 들어오는 값에 따라 다른 출력을 할 수 있다.
최근에는 유니코드라는 새로운 문자 체계를 도입해 다양한 언어, 문자들을 추가한다.
scanf
유저에게 문자열을 입력받을 수 있다.
#include <stdio.h>
int main() {
double celsius;
printf("섭씨 온도를 화씨 온도로 바꿔주는 프로그램\n");
printf("섭씨 온도를 입력해주세요:");
scanf("%lf", &celsius); /*온도 입력*/
printf("섭씨 %f 도는 화씨 %f 도 입니다.", celsius, 9.0 / 5.0 * celsius + 32);
return 0;
}
double celsius;
여기서 celsius라는 변수가 double형으로 선언된 것을 볼 수 있다.
scanf("%lf", &celsius); /*온도 입력*/
이 코드를 보면 출력 형식에 %lf
가 있는데, double형의 데이터를
입력받을 때는 %lf
로 포맷을 설정해줘야한다.
float과 double의 경우, printf에서 출력 포맷으로 모두 %f를 사용할 수 있는데,
scanf로 float을 입력받을 때는 %f
, double을 입력받을때는 %lf
로 받아야한다는 것이다.
입출력 포맷이 다른 경우
출력받을때와 입력받을때 포맷이 각각 다른데,
short형은 %hd
long형은 %ld
double형은 %lf
로 입력받는 것이 특징이다.
버퍼오버플로우
올바른 형식의 데이터를 입력받지 않았을떄, 예시로 char형 변수에 한글을 입력받으면 허용된 메모리 이상에 데이터를 집어넣게된다.
이때 발생하는 오류가 버퍼 오버플로우
이고, 이는 보안 상 매우 취약하고, 데이터가 손상되어 문제가 발생할 수 있다.
그래서 사용자의 입력을 항상 검사해야한다.
다른 문제
위의 섭씨 프로그램에서 숫자들이 9.0과 5.0으로 표현된 이유는
9 / 5 를 그냥하면 정수형끼리 나눠진것으로 프로그램이 이해하고 나머지는 버려져 1만 남기 때문이다.
댓글남기기