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반