C/C++ 구조체 포인터 데이터의 디스크 저장 및 복원
Source
Evernote/Advanced View Required/CC++ 구조체로 구성된 애플리케이션 정보를 디스크에 기록하는 법 2 Wireframe.md
Summary
이 문서는 C/C++에서 포인터를 포함하는 구조체(특히 가변 길이 문자열)를 디스크에 저장하고 복원하는 방법을 다룹니다. 포인터 주소 자체는 저장할 수 없으므로, 포인터가 가리키는 실제 데이터와 그 길이를 함께 저장해야 합니다. 예제 코드는 헤더 정보(버전, 개수 등)를 먼저 기록한 후, 각 레코드별로 문자열 길이와 실제 문자열, 그리고 다른 스칼라 타입 데이터를 순차적으로 fwrite/fread 로 처리하는 방식을 보여줍니다. 동적 메모리 할당(malloc/calloc)과 해제(free) 관리가 필수적입니다.
Key Points
- 포인터는 메모리 주소이므로 디스크 저장 시 무의미하며, 가리키는 실제 값과 길이를 저장해야 함
- 가변 길이 데이터(문자열) 저장 시 데이터 길이(length)를 먼저 기록하여 복원 시 정확한 읽기 범위 결정
- 파일 구조: 헤더(메타데이터) + (길이 + 데이터 + 기타 필드)의 반복
- 복원 시 동적 메모리 할당(calloc) 후 데이터 읽기, 사용 후 메모리 해제(free) 필수
- 바이너리 모드(wb/rb)로 파일 입출력 수행