영문 한 글자를 입출력하는데 사용하는 자료형은 char입니다. 내부적으로 8비트 정수 형식이기 때문에 글자에 숫자를 더하거나 빼는 연산도 가능합니다.
int getchar(void)
int putchar(int c);
getchar() 함수는 문자 '하나'를 입력받기 위한 표준 입력 함수입니다. 함수 호출 전에 결정할 사항은 없고(void) 함수를 통해 얻을 수 있는 정보의 형식은 int형입니다.
한 가지 주의할 점은 char형을 반환하는 것이 아니라 int형을 반환한다는 점입니다. 둘은 크기의 차이만 있을 뿐 같은 정수 형식입니다.
putchar()는 호출 전에 반드시 int형 자료 하나를 기술해야 하며 함수 호출결과로 int형 자료를 얻을 수 있습니다.
_getch(), _getche() 함수는 getchar() 함수와 기본 기능은 같지만 동작 특성과 내부 구조는 다릅니다.
getchar() : 입력한 문자가 어떤 것인지 그 정보 자체를 다루려는 목적
_getch(), _getche() : 어떤 문자가 입력된 것인지보다는 단지 "아무 키나 눌려서 사용자 입력이 발생했음"을 감지하려는 목적
둘의 가장 큰 차이점은 Non-buffered I/O를 한다는 점입니다. _getch(), _getche()는 사용자가 입력한 정보가 버퍼를 거치지 않고 즉시 전달됩니다. 또, 함수를 사용하려면 conio.h 헤더 파일을 include 해야 합니다.
- getchar() : 문자열을 입력하고 엔터를 누르면 제일 처음 글자를 반환
- _getch() / _getche() : 한 글자라도 입력되면 즉시 반환
문자열은 '문자의 배열'입니다.배열의 이름은 메모리의 주소에 부여한 식별자입니다.
char *gets(char *buffer)
int puts(const char *string)
gets() / puts() 함수는 각각 문자열을 입출력 해주는 함수입니다. getchar(), putchar() 함수와 달리 매개변수가 포인터입니다.
gets() 함수는 호출 과정에서 매개변수에 문자열이 저장될 메모리 주소를 전달받는데, 그 주소의 메모리에 문자열을 배달해주기 때문입니다.
puts()는 출력할 문자열이 저장된 메모리의 주소에 접근하여 문자들을 화면에 출력합니다.
그런데, 두 함수를 사용한 코드를 빌드했을 때, 보안 경고 메시지를 볼 수 있습니다. 이 함수들은 보함 결함이 알려진 함수로, 대체 함수를 사용하는 것이 좋습니다.
char *gets_s(char *buffer, size_t sizeInCharacters);