개발 Study

#19 동적할당 (2) 및 입출력 스트림 버퍼

HYuk 2021. 4. 17. 03:47
728x90

#18 구조체(2) 및 동적할당 (tistory.com)

 

#18 구조체(2) 및 동적할당

struct test { char a; int i; double d; }; # 구조체의 크기 구조체의 크기는 일반적으로 생각하면 안된다. 위와 같은 구조체가 있을 때, 해당 구조체의 크기는 16이 된다. 일반적으로 생각 했을 때, char // 1

hyukee.tistory.com

 

#동적할당 (C++)

기존에 배웠던 malloc, calloc 등은 C언어기반이다.

C++에서는 new 를 사용한다.

선언방법은

new 자료형; 이다.

ex) int* ptr = new int;

 

기존 malloc 이나 calloc 보다 훨씬 간편하게 쓸 수 있다.

new는 초기값이 쓰레기값이 대입되며, new는 초기화시 delete를 사용한다.

초기화 방법

ex) delete ptr;

이때 ptr의 주소값도 00008123으로 초기화가 되지만 웬만하면 nullptr 해주는 것이 좋다.

 

동적 배열을 만들 때는 ex) int* ptr = new int [ 배열수 ] ; 해주면 된다.

 

 

#입출력 스트림 버퍼

입력과 출력 하는 통로에 버퍼 라는 것이 있는데,

입력 또는 출력을 할 때 일반적으로 입력 하는 것과 받는 곳이 한번에 이어져 있지 않다.

 

이 버퍼 라는 것은 예를들면 입력에서 키보드에서 프로그램으로 데이터가 전송 될 때, 버퍼라는 곳에 저장이 되었다가 전송! 하면 모았다가 한번에 전송 할 수 있도록 도와 주는 것이다.

짐을 옮길 때 수레라고 생각하면 간단하다.

 

stdin => 표준 입력 스트림 -> 기본 키보드

stdout => 표준 출력 스트림 -> 기본 모니터

stderr => 표준 오류 스트림 -> 기본 모니터

 

1. 단일문자 출력함수

fputc('A', stdout);

 

2. 단일문자 입력함수

char ch = fgetc(stdin);

 

3. 문자열 출력함수

fputs("Hello", stdout);

 

4. 문자열 입력함수

char ch[10] = fgets(stdin);

 

여기서 fputc, fgetc 는

함수 호출에 성공하면 입출력할 문자를 반환한다.

함수 호출에 실패하면 EOF를 반환한다.

 

# EOF
End Of File의 약자인데, 파일의 끝을 표현 하기 위해 존재하는 상수 (-1) 이다.

여기서 보면 fputc fgetc는 반환값이 int형인데,

int형인 이유는

만약 char를 할 경우, 시스템 환경에 따라 unsigned로 표현될 수 있어, -1을 표현할 수 없게 된다.

int는 어떠한 환경이어도 signed를 유지하기 때문에, int로 반환 되는 것이다.

 

728x90