C언어 Chapter 33. 파일 입/출력 복습 🔔 예) 학생의 레코드를 키보드로부터 입력받아 write()함수를 이용하여 구조체 단위로 파일에 기록하고, 다시 열어서 read()함수로 읽어서 화면에 출력하는 프로그램. [구조체 STUDENT] [main 함수] 실행 결과 리다이렉션 📌 리다이렉션(redirection)이란 표준 입력 장치인 키보드나 표준 출력 장치인 스크린을 대상으로 작성된 프로그램에서 키보드나 스크린을 대신 입력이나 출력을 다른 파일로 바꾸어 주는 것을 말한다. bzero() 함수 와 memset() void bzero(void *s, size_t n); 메모리를 0으로 채운다. void *memset(void *s, int c, size_t n); 메모리를 상수 바이트(constan..
C언어 Chapter 32. 임의 접근 지금까지의 파일의 입출력은 파일의 처음부터 끝까지 순차적으로 읽거나 쓰는 것이었다. fseek()함수를 이용하면 파일 내의 임의의 위치에 바로 접근할 수 있다. 📌 fseek() 함수의 원형 int fseek(FILE *fp, long offset, int origin); origin 부터 offset 만큼 떨어진 부분을 찾는다. origin 는 기준점 이다. [origin 의 값] 🔔 예) fseek(fp, 35L, SEEK_SET); 파일의 시작점에서 35바이트 떨어진 위치가 파일 내 현재의 위치도 설정 된다. 여기서부터 읽거나 쓸 수 있다. fseek() 함수는 성공이면 0을 반환한다. ftell() 함수는 현재파일 내의 읽기 점이나 쓰기 점을 반환한다. (파..
C언어 Chapter 31. gets() 함수의 man page 설명 📌 gets 함수의 정의 형태 🔔 예) while 문의 올바른 사용 🎯 프로그램 수정 위와 같은 while 문은 한눈에 분석하기 까다롭다. 아래와 같이 고쳐 쓸수있다. 한글자만 쓸 경우fputs 보다 fputc 로 대체할 수 있다. 형식화 입출력 int fscanf(FILE *stream, const char *format [, argument]...); int fprintf(FILE *stream, const char *format [, argument]...); fscanf() 함수는 오륙 발생하거나 파일의 끝에 도달하면, EOF 를 돌려준다. fprintf() 함수는 오류가 발생하면 음수값을 반환한다. 🔔 예) 키보드로부터 학생 ..
C언어 Chapter 30. 문자열 입출력 fgets() 함수와 fputs() 함수의 원형 char *fgets(char *str, int length, FILE *fp); // EOF를 만나면 NULL반환 int fputs(const char *str, FILE *fp); fgets() 함수의 호출 형식 char buffer[80] fgets(buffer, length, fp); fputs() 함수의 호출 형식 fputs(buffer, fp); 🔔 예) 문자열을 입력받아 파일에 기록한 후 파일의 내용을 화면에 출력하는 프로그램 🎯 프로그램 설명 while (fgets (string, 80, fp) != NULL) { printf("%s", string); } fgets() 함수는 EOF를 만나면 NUL..
C언어 Chapter 28. 연결리스트에 많이 사용되는 함수 연결리스트를 인수로 넘겨받아 내용을 출력하는 함수 void print_list (NODE *head) { if (head == NULL) { printf("NULL\n"); } else { printf("%c ==> ", head -> data); print_list (head -> next); } } 연결리스트의 노드의 개수를 헤아리는 함수 int count (NODE *head) { if (head == NULL) { return 0; } else { return (1 + count (head -> next)); } } 연결리스트의 메모리를 해체하는 함수 void loop_free (NODE *head) { NODE *temp, *curre..
C언어 Chapter 27 💡 static 변수의 메모리 주소는 컴파일시에 주소값이 고정된다. 실행될 때 만들어지는 주소는 다이나믹 변수이고, (heap, stack), 실행되기 전에 만들어 지는 주소는 전역변수다.(code, data, BSS) 구조체를 가리키는 포인터 변수 STUDENT *sp; 구조체 를 가리키는 포인터변수는 일반 포인터 변수와 동일하다. ap->age = 20; 포인터 변수로 구조체에 접근할 때는 도트표기대신 화살표를 사용. (*sp).age; 위 와 동일하지만 일반적으로 화살표를 많이 사용한다. 🔔 Ex) 데이터 파일에서 키와 몸무게를 읽어 비만을 체크하는 프로그램 💡 프로그램 설명 sp->name 위와 같은 구조체 포인터 사용법에 중점을두고 소스를 분석 할 것 [ d9-5.da..
C언어 Chapter 26. 💡 구조체 내부에서 빈 메모리공간을 사용하지 못하도록 사용하지 않는 char형 배열로 막아버리는 형태 typedef struct EMB { int A; char B; char pad[3]; // 사용하지 않는 메모리 공간을 막는 변수 int C; } emb; [위 소스의 메모리 형태] int A char B char pad[3] int C 구조체 초기화(복습) typedef struct EMB { int A; char B; char pad[3]; int C; }emb; 위 소스는 main 문에서 다음과 같이 초기화 할수 있다. int mian( ) { emb A; emb B = {0, 0,{1, 2, 3}, 100} return 0; } typedef struct EMB 구조..
C언어 Chapter 25. 문자 함수 문자를 다루는 라이브러리 함수의 헤더파일이 에 정의되어 있다. 문자가 특정부류에 속하면 참을(1), 아니면 거짓(0)을 봔환. 🔔 예) 문자 함수를 사용한 프로그램의 예 #include #include int main() { if(isalnum ('a')) { printf("\'a\' is alphnum\n"); // 'a' is alphnum } else { printf("\'a' is not alphnum\n"); } if(iscntrl ('\5')) { printf("\'5\' is aplhnum\n"); // '\t' is cntl } else { printf("\'5\' is not aplhnum\n"); } if(iscntrl ('\t')) { print..