23. 표준 입출력 개요

질문) 키보드로 값을 입력받거나 콘솔 화면에 출력할 때는 무얼 사용하나요? 대답) 표준 입출력 함수를 사용하지. stdio.h 를 포함하면 표준 입출력 함수를 사용할 수 있어. printf는 출럭, scanf_s는 입력!

프로그래밍 언어의 문법을 익히고 프로그래밍 작성 능력을 키우려면 기본적인 입출력 기능은 사용할 수 있어야겠죠.
C언에서는 다양한 입출력 방법을 제공하는데 여기에서는 표준 입출력 함수 중에 자주 사용하는 함수를 살펴볼게요.

이미 앞에서 설명없이 사용했던 printf 함수는 대표적인 표준 입출력 함수예요.
표준 입출력 함수를 사용하려면 stdio.h 파일 포함문이 필요하죠.
#include <stdio.h>

여기에서는 stdio.h에서 제공하는 많은 함수 중에 세 가지 표준 출력 함수와 다섯 가지 표준 입력 함수를 소개할게요.

int printf(const char * format, … );
int putchar(int ch);
int puts(const char *str);

int scanf(const char * format, … );
int scanf_s(const char *format,…);
int getchar(void);
char * gets(char *buf);
char *gets_s(char *base,size_t size);

printf 함수와 scanf, scanf_s는 첫 번째 입력 인자로 전달한 포멧에 맞게 출력하거나 입력 받는 함수입니다.
하나의 문자를 출력하거나 입력 받을 때는 putchar와 getchar를 사용해요.
그리고 문자열을 출력하거나 입력 받을 때는 puts와 gets, gets_s를 사용할 수 있어요.

scanf_s와 get_s 처럼 뒤에 _s 함수는 안전한 버전의 함수를 의미해요.
scanf 함수와 gets 함수에서 문자열을 입력받을 때 버퍼 크기를 전달하지 않아 버그가 발생할 수 있어요.
만약 사용자가 버퍼 크기보다 더 많이 입력하면 버퍼 오버 플로우 버그가 발생하거든요.
이러한 문제를 해결하기 위해 제공하는 함수들은 _s가 뒤에 붙어요.

뒤에 _s가 붙는 함수가 모두 버퍼 오버 플로우 문제를 해결하기 위한 것은 아니지만 안전하다는 의미는 맞아요.
그리고 버퍼 오버플로우 버그를 해결하기 위해 제공하는 함수들은 모두 _s가 붙어요.
이러한 함수들은 초기 C언어 표준에서는 제공하지 않았던 함수들이예요.