[C언어] 3.표준입출력
C언어 학습 노트 : 3. 표준 입출력#
1. HCI (인간-컴퓨터 상호작용)#
CLI (Command Line Interface)
- 텍스트 명령어를 통해 사용자와 컴퓨터가 상호작용하는 방식이다.
GUI (Graphical User Interface)
- 그래픽 요소를 활용하여 사용자와 컴퓨터가 상호작용하는 방식이다.
2. 주요 함수#
(1) getchar()#
- 한 문자를 입력받는 함수이다.
- 입력은 버퍼(buffer)를 거쳐 처리된다.
- 버퍼가 비어 있으면 입력을 기다리고, 버퍼에 데이터가 있으면 첫 번째 문자 하나만 반환한다.
- 반환값은
int형으로,EOF처리를 위해char가 아닌int로 정의된다.
#include <stdio.h>
int main(void) {
int c;
printf("문자를 입력하세요: ");
c = getchar();
printf("입력한 문자: %c\n", c);
return 0;
}
(2) scanf()#
서식 지정자(format specifier)에 맞추어 입력을 받는 함수이다.
- 예:
%d(정수),%s(문자열)
- 예:
버퍼 오버플로우 등의 보안 취약점이 존재한다.
안전한 대안으로
scanf_s()사용이 권장된다.
(3) gets()#
- 문자열을 한 줄 단위로 입력받는 함수이다.
- 입력 크기를 제한하지 않아 심각한 보안 문제가 발생한다.
- C11 표준에서 완전히 제거되었으며,
gets_s()사용이 권장된다.
(4) puts()#
- 매개변수로 전달된 문자열을 출력한다.
- 출력 후 자동으로 개행 문자를 추가한다.
(5) fflush()#
- 버퍼를 비우는 함수이다.
- 예:
fflush(stdout);→ 표준 출력 버퍼를 즉시 비운다.
3. 입출력의 원리#
- 입출력은 사용자 모드(user mode)가 아닌 커널 모드(kernel mode) 에서 수행된다.
- 사용자 모드와 커널 모드 간 연결 단위는 파일(file) 이다.
- 네트워크 통신에 사용되는 소켓(socket) 또한 파일의 일종으로 취급된다.
4. 버퍼(Buffer)#
- 버퍼는 데이터를 임시 저장하는 메모리 영역이다.
- ‘완충기’라는 의미를 가지며, 입출력 속도의 불균형을 보완한다.
5. DMA (Direct Memory Access)#
- DMA는 데이터 전송 시 CPU 개입을 최소화하는 방식이다.
- 장치가 메모리에 직접 접근하여 데이터를 전송하므로 속도가 향상된다.
6. int 자료형의 범위#
부호 있는 32비트
int형: -2,147,483,648 ~ 2,147,483,647범위를 초과하면 오버플로우가 발생한다.
- 예:
2,147,483,648→-2,147,483,648 - 예:
2,147,483,649→-2,147,483,647
- 예:
부호 없는
unsigned int: 0 ~ 4,294,967,295 (2^32 - 1)
학습 포인트 정리#
getchar()는 문자를 입력받고int형으로 반환한다.scanf()와gets()는 보안 문제로 사용이 권장되지 않으며,scanf_s(),gets_s()를 대체로 사용한다.puts()는 문자열 출력 시 자동으로 개행을 추가한다.fflush()는 출력 버퍼를 비운다.- 모든 입출력은 커널 모드에서 처리되며, 파일과 소켓은 동일한 추상 개념으로 다뤄진다.
int자료형은 32비트 기준으로-2^31 ~ 2^31 - 1까지 표현 가능하다.