[C언어] 표준 입출력 도구

jaemin·2021년 5월 12일
0

C언어

목록 보기
2/2
post-thumbnail

표준 입출력 도구

문자 입출력

영문 한 글자를 입출력하는데 사용하는 자료형은 char입니다. 내부적으로 8비트 정수 형식이기 때문에 글자에 숫자를 더하거나 빼는 연산도 가능합니다.

getchar() / putchar() 함수

int getchar(void)
int putchar(int c); 

getchar() 함수는 문자 '하나'를 입력받기 위한 표준 입력 함수입니다. 함수 호출 전에 결정할 사항은 없고(void) 함수를 통해 얻을 수 있는 정보의 형식은 int형입니다.
한 가지 주의할 점은 char형을 반환하는 것이 아니라 int형을 반환한다는 점입니다. 둘은 크기의 차이만 있을 뿐 같은 정수 형식입니다.

putchar()는 호출 전에 반드시 int형 자료 하나를 기술해야 하며 함수 호출결과로 int형 자료를 얻을 수 있습니다.

_getch() / _getche() 함수

_getch(), _getche() 함수는 getchar() 함수와 기본 기능은 같지만 동작 특성과 내부 구조는 다릅니다.

getchar() : 입력한 문자가 어떤 것인지 그 정보 자체를 다루려는 목적
_getch(), _getche() : 어떤 문자가 입력된 것인지보다는 단지 "아무 키나 눌려서 사용자 입력이 발생했음"을 감지하려는 목적

둘의 가장 큰 차이점은 Non-buffered I/O를 한다는 점입니다. _getch(), _getche()는 사용자가 입력한 정보가 버퍼를 거치지 않고 즉시 전달됩니다. 또, 함수를 사용하려면 conio.h 헤더 파일을 include 해야 합니다.

  • getchar() : 문자열을 입력하고 엔터를 누르면 제일 처음 글자를 반환
  • _getch() / _getche() : 한 글자라도 입력되면 즉시 반환

문자열 입출력

문자열은 '문자의 배열'입니다.배열의 이름은 메모리의 주소에 부여한 식별자입니다.

  • 주소는 집주소처럼 메모리의 위치를 표시하는 정보
  • 주소를 저장하기 위한 전용변수가 포인터
  • 배열의 이름은 주소
  • 배열은 여럿이 한 데 모인 집합체
  • 배열의 이름은 포인터에 담을 수 있다

gets() / puts() 함수

char *gets(char *buffer)
int puts(const char *string)

gets() / puts() 함수는 각각 문자열을 입출력 해주는 함수입니다. getchar(), putchar() 함수와 달리 매개변수가 포인터입니다.

gets() 함수는 호출 과정에서 매개변수에 문자열이 저장될 메모리 주소를 전달받는데, 그 주소의 메모리에 문자열을 배달해주기 때문입니다.

puts()는 출력할 문자열이 저장된 메모리의 주소에 접근하여 문자들을 화면에 출력합니다.

그런데, 두 함수를 사용한 코드를 빌드했을 때, 보안 경고 메시지를 볼 수 있습니다. 이 함수들은 보함 결함이 알려진 함수로, 대체 함수를 사용하는 것이 좋습니다.

char *gets_s(char *buffer, size_t sizeInCharacters);
profile
프론트엔드 개발자가 되기 위해 공부 중입니다.

0개의 댓글