[C언어 50강] 40강. 파일 입출력 2: fgets/fputs, fread/fwrite(바이너리)
지난 강의에서 fprintf/fscanf로 텍스트 파일을 다뤘다면, 이번 강의에서는 한 단계 더 현실적인 입력 처리로 넘어갑니다. 핵심은 두 갈래입니다. 텍스트를 줄 단위로 안전하게 다루는 fgets/fputs, 그리고 데이터를 바이트 단위로 정확히 저장/복원하는 fread/fwrite입니다. 문법만 보면 단순하지만,…
[C언어 50강] 39강. 파일 입출력 1: fopen/fclose, fprintf/fscanf
메모리 안에서만 데이터를 다루던 프로그램은 실행이 끝나면 모든 상태가 사라집니다. 그래서 실제 프로그램은 “지속성(persistence)”을 위해 파일 입출력을 사용합니다. 오늘은 fopen, fclose, fprintf, fscanf를 중심으로, 단순 문법보다 파일이라는 외부 자원과 어떻게 계약을 맺고 안전하게 다뤄야…
[C언어 50강] 38강. 연결 리스트(단일): 노드/삽입/삭제/순회 구현
배열 기반 자료구조를 익힌 뒤 연결 리스트를 만나면, 처음에는 오히려 불편하게 느껴질 수 있습니다. 인덱스로 바로 접근도 못 하고, 포인터를 계속 따라가야 하고, 코드도 길어 보이기 때문입니다. 하지만 실제 소프트웨어에서는 “중간 삽입/삭제가 자주 일어나는 데이터”를 다룰 때 연결 리스트 사고방식이 매우 강력합니다. 오…
[C언어 50강] 37강. ADT 개념 + 스택 구현(배열 기반)
C언어에서 자료구조를 배우기 시작하면 가장 먼저 마주치는 전환점이 있습니다. “배열을 쓰면 되는데, 왜 굳이 스택(Stack)이라는 이름을 붙이고 인터페이스를 나누지?” 오늘 주제인 ADT(Abstract Data Type, 추상 자료형)와 배열 기반 스택 구현은 바로 이 질문에 대한 답입니다. 핵심은 단순히 push/…
[C언어 50강] 36강. typedef / enum / union / bit-field: 타입 설계 도구
C언어에서 문법을 오래 공부할수록 오히려 더 중요해지는 질문이 있습니다. “이 값은 도대체 어떤 의미를 가진 타입인가?” 오늘 다룰 typedef, enum, union, bit-field는 각각 문법 자체는 짧지만, 코드의 의미를 분명하게 만들고 메모리 표현을 통제할 수 있게 해 주는 타입 설계 도구입니다. 이 네 가…
[C언어 50강] 35강. 구조체 심화: 구조체 배열, 구조체 포인터, -> 연산자
구조체 배열은 "같은 레코드 타입의 연속 저장소"이며, 인덱스로 개별 레코드에 접근한다. 구조체 포인터는 큰 구조체 복사 비용을 줄이고, 함수가 원본 데이터를 수정할 수 있게 해 준다. -> 연산자는 "포인터가 가리키는 구조체의 멤버"에 접근하는 문법 설탕이며, (*ptr).member와 동일하다.
[C언어 50강] 34강. 구조체 struct: 선언/초기화/멤버 접근
구조체(struct)는 서로 다른 타입의 데이터를 하나의 논리 단위로 묶는 사용자 정의 타입입니다. 배열이 "같은 타입의 연속 집합"이라면, 구조체는 "의미가 다른 필드들의 묶음"에 가깝습니다. 예를 들어 학생 정보를 다룰 때 이름(문자 배열), 학번(int), 평점(double)을 각각 따로 관리하면 서로 엮인 데이터…
[C언어 50강] 33강. 포인터로 함수 설계: out-parameter, 배열/구조체 반환 전략
C언어에서 함수 설계가 어려워지는 지점은 문법이 아니라 데이터의 소유권과 생명주기가 함수 경계를 넘나들기 시작할 때입니다. 특히 배열이나 구조체처럼 크기가 있거나, 계산 결과를 여러 개 돌려줘야 하는 경우에 "반환값 하나로는 부족한데 어떻게 인터페이스를 잡아야 하지?"라는 고민이 생깁니다. 오늘은 포인터를 활용한 함수…
[C언어 50강] 32강. 메모리 구조: stack/heap/data/text, 생명주기(lifetime)
C언어를 어느 정도 배우면 문법보다 더 중요한 질문이 생깁니다. "이 변수는 메모리 어디에 올라가고, 언제까지 유효한가?" 오늘은 바로 그 질문에 답하는 시간입니다. stack, heap, data, text 영역을 단순 암기가 아니라 프로그램 생명주기 관점에서 연결해 이해해보겠습니다. 포인터 버그, 초기화 버그, 성능…
[C언어 50강] 31강. 메모리 버그: 누수/댕글링/더블 프리 + 디버깅 감각
동적 메모리를 배운 직후부터 C 코드 품질을 가르는 기준은 문법 실수가 아니라 메모리 버그를 얼마나 체계적으로 다루느냐입니다. 특히 메모리 누수(leak), 댕글링 포인터(dangling pointer), 더블 프리(double free)는 초급자뿐 아니라 실무자도 긴장하는 영역입니다. 오늘은 단순히 "이런 버그가 있다…