C 공부 (6일차)

2월 14일부터 16일까지는 부산으로 여행을 다녀왔다. 이런 저런 얘기도 나누고, 꽤나 열심히 돌아다니다 보니 3일은 순식간에 사라졌다. 좋은 기억들을 뒤로 하고 다시 현생에 적응할 때이다. 아침에는 수강신청을 했으나 계획한 시간표를 얻어낼 순 없었다. 아무래도 교양 잡기가 너무 어렵다... 그래도 4학년은 내가 공부하고자 하는 것에 집중할 예정이니 크게 문제될 것은 없다! 다시 시작해보자.

오늘의 링크
링크텍스트

문자 입력 받기

문자를 저장하는 변수는 char 형으로 선언을 해준다!
그리고 a라는 변수에 문자 a를 대입하고 있고, 이 때 문자들은 작은 따옴표로 묶어주어야 한다는 점을 알 수 있다. 만약,

a = a;

와 같이 선언을 하게 되면, a에는 아무런 값이 들어있지 않은 NULL이 된다. 그리고 이상한 값이 출력될 것이다!

컴퓨터는 모든 문자와 숫자를 0과 1로 이해하기 때문에 'a'라는 문자를 절대 알 리가 없다. 그래서 a를 어떤 수로 이해하는지 10진수의 형태로 출력해보면 97이라는 수와 대응되어 있다는 사실을 알 수 있다.

처음에는, 미국 표준 학회(ASA)에서 정한 아스키(ASKII)코드로 여러 문자에 번호를 붙였었다고 한다. 원래는 7비트로 128개의 문자를 나타냈었는데, 부족해서 8비트로 확장했었다. 그러나 컴퓨터가 전세계에 보급되면서 좀 더 많은 문자를 표현해야 할 필요가 생겨서 유니 코드(Unicode)라는 새로운 형식의 문자 체계를 받아들였다! 유니코드는 한 문자를 1바이트에서 4바이트까지 다양한 길이로 처리한다고 한다.

scanf!

모두의 코드에서 제시한 것은 섭씨 온도를 화씨 온도를 바꾸는 거였는데 그건 안하고, 최근에 주차비를 냈던게 생각이 나서 그걸 프로그램으로 만들어 봤다.

scanf라는 함수를 처음 접했다. scanf 함수는 우리가 어떠한 입력을 하기 전까지 계속 기다리다가, 입력을 하고 엔터를 누르면 입력으로 처리를 한다. printf 함수에서 %d, %f, %c 처럼 각 변수를 출력할 포맷을 달리하는데, scanf도 마찬가지이다!

이 때, 외워야할 것이 있다면, double 형의 변수를 입력받기 위해서는 %lf로 해야하고, float 형의 변수를 입력받기 위해서는 %f로 해야한다! 이처럼, scanf는 각 자료형마다 포맷이 정해져 있고 밑에 적어보자.

char형 : %c
short형 : %hd
int형 : %d
long형 : %ld
float형 : %f
double형 : %lf

참고로, 최대 1 바이트를 차지하는 char형 변수에 한글을 치면 2바이트 이상을 차지하기 때문에 오류가 나고, 이 오류를 '버퍼 오버플로우'라고 하는데 보안적으로 매우 취약하다. 해커들은 정상적인 코드 대신 자신들이 원하는 코드가 실행되도록 이 오류를 악용할 수 있다. 또한 근처의 데이터도 손상될 수 있다.

좋은 웹페이지 즐겨찾기