수업기록

메모리_누수 를 알 수 있는 방법. vld라는 라이브러리를 사용하거나, 코드로 찾아내기도 함.

_CrtDebugFlag 함수와 헤더를 넣어야 함.

msdn에서 찾아볼 것.(누수는 그때그때 잡아야 함.)


입출력 코드보다 개념이 중요함.

입출력의 3가지

  • 콘솔 입출력
  • 파일 입출력
  • 소켓 입출력 (네트워크 - 서버)

콘솔입출력 스트림 : 프로그래밍 상의 흐름. 단방향성이라는 특징이 있음.

버퍼 : 무언가를 저장하는 메모리 블럭 중앙처리 장치 CPU가 입력과 출력을 상시적으로 대기하고 있게 된다면 다른 프로그램을 구동하고 있을 수 없기 때문에, 임시적으로 저장하고 있는 공간이 필요한 것. ex _ 커서가 깜빡거리는 것은 입력 버퍼가 입력을 대기하고 있는 것.

입출력 모드

  • 텍스트 모드 : 입출력의 결과 상태를 오로지 문자열 형태로 지원
  • 바이너리 모드 : 입출력의 결과 상태를 오로지 이진수 형태로 지원

문자열 입출력 함수

오로지 문자열만 입력과 출력만 담당하는 함수.(문자열만 입출력할 때 효율적) 문자열 입력 함수는 모두 텍스트 모드임

  • 콘솔 기반 전용 함수 콘솔 입출력 시에만 사용
  • 공용 함수 모든 입출력 상황에서 사용이 가능(콘솔/소켓/파일)

(콘솔 기반) 단일 문자 출력 함수(아스키 코드 문자)

putchar(65) =>  'A'

(공용) 단일 문자 출력 함수

fputc(아스키코드, 스트림)
fputc(66,stdout)
콘솔 입출력 시 사용 가능한 스트림 종류
stdin : 표준 입력 스트림(키보드)
stdout : 표준 출력 스트림(모니터)
stderr : 표준 에러 스트림(모니터)

(콘솔 기반) 단일 문자 입력

char name = getChar();

(공용) 단일 문자 출력

char Name = fgetc(stdin);
fputc(Name,stdout)

EOF (-1로 매크로화 되어있는 상수. End Of File : 파일의 끝을 의미하는 상수) (콘솔 입출력 시 ctrl -z 가 eof를 발생시킴)

(콘솔 기반) 문자열 출력

puts("hellp");

cin 은 공백을 입력받을 때에는 입력처리를 진행하지 않으나, puts는 가능 또한 자동 개행을 제공함

(공용) 문자열 출력

fputs("hellp",stdout);

자동 개행을 제공하지 않음. 파일 입출력도 함께 지원하다보니 바이너리 모드의 특성을 지니고 있음.

cout의 endl은 텍스트 모드일 때, 바이너리 모드일 때 다름. 텍스트 모드 : \r \n 캐리지 리턴(맨앞으로 커서를 땡긴다.) 바이너리 모드 : \n 캐리지 리턴 없음


문자열 입력 함수 콘솔기반 문자 입력 gets_s : 반환 타입이 char* gets_s(문자열, 크기) 용량보다 큰 문자열이 입력되면 에러

fgets fgets(문자열, 크기, 스트림) 읽어들일 수 있는 만큼만 읽음. 또한 엔터도 읽음


fflush(stdout) : 출력 버퍼 비우기 함수 버퍼 비우기는 왜? 필요한가?

입력 받을 때 입력 버퍼를 지우지 않으면 오바한 데이터가 다음 변수에 들어갈 수 있음.


파일입출력

파일 입출력의 단계

  1. 파일 개방(스트림 생성 핸들 생성)

  2. 파일 입출력 함수 호출() 핸들? 윈도우의 체제와 관련됨. (윈도우의 리소스 : 프로세스 /쓰레드 / 파일) 파일을 변경하면 윈도우는 어디서 어떻게 언제 바뀌었는지 알고 있어야 함. 그런데 그걸 어떻게 알아?

    모든 리소스에는 윈도우가 고유 식별번호(ID)를 부여하게 됨. 이런 16진수 정수로 이루어진 식별 번호를 핸들이라고 부름.

  3. 개발한 파일 소멸

파일 개방 함수

FILE * pfile = NULL;

fopen_s(파일 포인터,경로,모드)

상대 경로 : 프로젝트 파일을 기준으로 현재 파일의 위치까지 표기한 상태 절대 경로 : 드라이브 명부터 현재 파일까지 모두 표기한 상태

입출력 모드 (ex rt ) r - 읽기 가능 (파일 x - 에러) w - 쓰기 가능 (파일 x - 생성) a - 파일의 끝에 덧붙여 쓰기 가능 (파일 x - 생성) r+ - 읽기/쓰기 가능 (파일 x - 에러) w+ - 읽기/쓰기 가능 (파일 x - 에러) a+ - 읽기/덧붙여 쓰기 가능 (파일 x - 에러) ------ t- 텍스트 모드 b - 2진 모드

FILE * pfile = NULL;

errno_t err = fopen_s(&pFile,"../Data/Test.txt","wt"); //개방
//파일 쓰기
if(0 = =err){
	fputs("world",pFile); //함수 호출
}
fclose(pFile);
FILE * pfile = NULL;
char szBuffer[]="";
errno_t err = fopen_s(&pFile,"../Data/Test.txt","rt"); //개방

if(0 = =err){
	szBuffer = fgets(szBuffer, sizeof(szBuffer),pFile); //함수 호출
	fputs(szBuffer,stdout); //함수 호출
}
fclose(pFile);

파일 입출력 함수(텍스트모드)

fseek : 파일 커서를 강제로 이동시키는 함수

fseek(파일스트림, 이동할 바이트 수, 커서의 시작 지점);

ftell : 현재 파일의 지시자(커서)의 위치, 0부터 시작.

ftell(파일스트림)
FILE* pfile =NULL;
errno_t err = fopen_s(&pFile, "../data/test.txt","rt");

fseek(pFile,3,SEEK_SET);
ftell(pFile); // 4

feof : 파일 지시자(커서)가 eof에 도달했는지 검사하는 함수. (끝에 도달 시 0이 아닌 값을 반환.)

feof(파일 스트림)

파일 입출력 함수(바이너리 모드)

fwrite

fwrite(저장(출력)할 메모리의 시작 주소, 출력할 메모리의 사이즈, 출력할 메모리의 개수, 스트림);

fread

fread(불러우기(입력)할 메모리의 시작 주소, 입력할 메모리의 사이즈, 입력할 메모리의 개수, 파일 스트림);

25-03-07 이미지 복사 25-03-07 RPG 저장 불러오기