C Programming - KAIST IT 아카데미

Download Report

Transcript C Programming - KAIST IT 아카데미

2014
ITA
8월 강의
C Programming
-6일차-
메모리 관리, 파일
정대진
(2014.08.13)
1
목차
 복습
 메모리관리
 전처리기
 파일
KAIST IT 아카데미
2
C Programming B반
복습 (1)
 문자, 문자열 함수
 stdin, stdout, stderr
 EOF (End Of File) (-1)
 gets()
• 길이 상관없이 입력
• 엔터 저장 안함
 fgets()
• 지정된 크기만큼 입력
• 엔터 저장
 문자열복사
• strcpy()
• strncpy()
 길이만큼 복사 <NULL 복사 안함>
 문자열비교
• strcmp()
 0 : 같다 / 1, -1 다르다
KAIST IT 아카데미
3
C Programming B반
복습 (2)
 구조체
 typdef struct 이름 {
내부 변수 선언;
}타입이름;
 . 연산자를 통해서 내부 변수 접근
 구조체 포인터
•
•
•
•
구조체 포인터로 본인의 포인터 선언 가능
포인터를 통한 내부 변수 접근
*(구조체변수).내부변수
구조체변수->내부변수
 열거형
• 의미있는 상수/변수 생성
KAIST IT 아카데미
4
C Programming B반
메모리 관리
 메모리의 구성
 운영체제가 동작을 위해 나눠 놓은 수납장
KAIST IT 아카데미
5
C Programming B반
메모리 관리
 메모리 영역
KAIST IT 아카데미
6
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
7
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
8
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
9
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
10
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
11
C Programming B반
메모리 관리
 프로그램 실행에 따른 메모리 상태 변화
KAIST IT 아카데미
12
C Programming B반
메모리 동적 할당
 전역변수와 지역변수로
해결이 되지 않는 상황
KAIST IT 아카데미
13
C Programming B반
메모리 동적 할당
 전역변수가 답이 아닌
예
KAIST IT 아카데미
14
C Programming B반
메모리 동적 할당
 힙 영역의 메모리 공간 할당 / 해제
KAIST IT 아카데미
15
C Programming B반
메모리 동적 할당
 malloc 함수의 반환형은 void*
 할당되는 문자의 용도를 함수를 만드는 시점에서 알 수 없음
KAIST IT 아카데미
16
C Programming B반
메모리 동적 할당
 힙 영역 접근
KAIST IT 아카데미
17
C Programming B반
메모리 동적 할당
 free() 함수를 호출하지 않으면!?
KAIST IT 아카데미
18
C Programming B반
메모리 동적 할당
 문자열 반환 함수 정의
KAIST IT 아카데미
19
C Programming B반
메모리 동적 할당
 calloc() 함수
 메모리 할당 후 0으로 초기화
 realloc() 함수
 메모리 사이즈 변경
KAIST IT 아카데미
20
C Programming B반
메모리 동적 할당
메모리 관리 함수
 문자열 함수와 사용법이 동일
 리턴 타입이 void*
KAIST IT 아카데미
21
C Programming B반
메모리 동적 할당
 realloc() 함수
KAIST IT 아카데미
22
C Programming B반
프로그램 실습
 사용자로부터 숫자 n을 입력 받아 nxn 매트릭스를 동적
으로 할당하고 각 element에는 0~n까지의 random한 수로
채워 화면에 출력하는 프로그램을 작성하시오
 이후 사용자가 좌표를 입력하면 해당 좌표의 주변값들
의 합을 출력하는 프로그램도 작성해보시오
KAIST IT 아카데미
23
C Programming B반
프로그램 실습
 realloc 함수를 구현 하시오
 새로 만든 메모리의 주소를 똑같이 만들지 않음
KAIST IT 아카데미
24
C Programming B반
전처리기
 전처리기
 컴파일러가 실행 되기 전에 실행하는 구문
 우리가 배운 예
• macro
• #define VALUE 5
KAIST IT 아카데미
25
C Programming B반
전처리기
 함수처럼 사용하는 macro
KAIST IT 아카데미
26
C Programming B반
전처리기
 함수처럼 사용하는 macro
KAIST IT 아카데미
27
C Programming B반
전처리기
 잘못된 macro 및 소괄호
KAIST IT 아카데미
28
C Programming B반
전처리기
 2 줄에 걸쳐서 작성하는 macro
KAIST IT 아카데미
29
C Programming B반
전처리기
 먼저 정의된 macro 사용
KAIST IT 아카데미
30
C Programming B반
전처리기
 macro를 쓰는 장단점
 일반 함수에 비해서 실행 속도가 빠름
• 함수의 호출 : 별도의 메모리 공간 필요
• 함수의 호출 : 호출된 함수로의 이동 및 반환 시간 필요
 자료형에 따라서 별도로 함수 정의 필요 없음
• 파라미터의 자료형에 구분을 받지 않음
 정의하기가 까다로움
 디버깅하기가 어려움
KAIST IT 아카데미
31
C Programming B반
전처리기
 macro를 함수 대신 사용하기 위한 조건
 함수의 크기가 작을 경우
• 복잡할 수록 오류발생 확률이 높음
• 분기, 반복문의 경우 정의하기 어려움
 호출의 빈도수가 높을 경우
• macro를 사용하는 이유는 성능 때문
KAIST IT 아카데미
32
C Programming B반
전처리기
 조건부 컴파일 (#if .. #endif ) : ~가 참이면
KAIST IT 아카데미
33
C Programming B반
전처리기
 조건부 컴파일 (#ifdef .. #endif ) : ~가 정의되었다면
KAIST IT 아카데미
34
C Programming B반
전처리기
 조건부 컴파일 (#ifndef .. #endif ) : ~가 정의 안되었다면
KAIST IT 아카데미
35
C Programming B반
전처리기
 #else (#if, #ifdef, #ifndef 의 경우)
KAIST IT 아카데미
36
C Programming B반
전처리기
 #elif (#if 의 경우)
KAIST IT 아카데미
37
C Programming B반
파일 입출력
 파일 스트림
 파일로부터의 데이터 입출력을 위해서 스트림 형성이 필수
KAIST IT 아카데미
38
C Programming B반
파일 입출력
 fopen() 함수를 통한 파일스트림 생성
KAIST IT 아카데미
39
C Programming B반
파일 입출력
 fopen() 함수를 통한 파일스트림 생성
KAIST IT 아카데미
40
C Programming B반
파일 입출력
 파일 출력 스트림
KAIST IT 아카데미
41
C Programming B반
파일 입출력
 파일 입력 스트림
KAIST IT 아카데미
42
C Programming B반
파일 입출력
 파일에 데이터 쓰기
KAIST IT 아카데미
43
C Programming B반
파일 입출력
 파일 스트림 닫기 fclose() 함수
KAIST IT 아카데미
44
C Programming B반
파일 입출력
 파일에서 데이터 읽기
KAIST IT 아카데미
45
C Programming B반
파일 입출력
 파일 스트림 (파일 개방 모드) 구분
KAIST IT 아카데미
46
C Programming B반
파일 입출력
 Read / Write
 + : 읽기, 쓰기 모두 가능
 a : 덧붙여 쓰기 가능
KAIST IT 아카데미
47
C Programming B반
파일 입출력
 Text / Binary
KAIST IT 아카데미
48
C Programming B반
파일 입출력
 파일 개방 모드 조합
KAIST IT 아카데미
49
C Programming B반
파일 입출력
 왜 text 모드가 존재하는가!?
 ‘\n’ : 개행
 개행을 표시하는 방법이 운영체제마다 다름
 개행 정보를 정확히 저장하기 위해서 운영체제에 맞게 ‘\n’을
변환 시켜서 저장해야 함
 Text 모드에서는 이것이 자동으로 이뤄짐
KAIST IT 아카데미
50
C Programming B반
파일 입출력
 파일 입출력 함수
KAIST IT 아카데미
51
C Programming B반
파일 입출력
 파일 스트림
KAIST IT 아카데미
52
C Programming B반
파일 입출력
 파일 복사 프로그램 - 문자단위
KAIST IT 아카데미
53
C Programming B반
파일 입출력
 파일 복사 프로그램
- 문자열단위
KAIST IT 아카데미
54
C Programming B반
파일 입출력
 바이너리 데이터 입출력 fread()
KAIST IT 아카데미
55
C Programming B반
파일 입출력
 바이너리 데이터 입출력 fwrite()
KAIST IT 아카데미
56
C Programming B반
파일 입출력
 바이너리 파일 복사 프로그램
KAIST IT 아카데미
57
C Programming B반
파일 입출력
 파일 서식 입출력
KAIST IT 아카데미
58
C Programming B반
파일 입출력
 구조체의 파일 입출력
KAIST IT 아카데미
59
C Programming B반
파일 입출력
 파일 위치 지시자
 파일 입출력 관련 함수 (fputs, fread, fwrite 등등)가 호출될 때 마
다 파일 우치 지시자의 참조 위치 변경
KAIST IT 아카데미
60
C Programming B반
파일 입출력
 파일 위치 지시자의 이동 fseek()
KAIST IT 아카데미
61
C Programming B반
파일 입출력
 fseek() 함수 호출 예
KAIST IT 아카데미
62
C Programming B반
오늘 수업 종료
 다음 수업 내용
 메모리관리 (동적할당)
 전처리기
 파일 입출력
KAIST IT 아카데미
63
C Programming B반