2012-10-31 2 views
1

저는 C++ 초심자입니다. 직원 정보를 보유하는 구조 배열이 있습니다. 값을 구조체에 넣고이 값을 이진 dat 파일에 쓰고 값을 프로그램으로 읽어 들여 콘솔에 표시 할 수 있습니다. 여기 내 문제가 있습니다. 일단 프로그램을 닫으면 파일에서 데이터를 메모리로 읽어 들여 메모리로 가져올 수 없습니다. 대신 "쓰레기"라고 읽습니다.이진 데이터 파일의 정보를 구조체 배열로 읽는 방법 C++

참고 : 구조가 포함 된 포인터가 제대로이 부분의 기술을 사용하여 디스크에 저장할 수 없습니다

나는 내 책이 읽을 다음 몇 가지를 시도하고. 이는 구조가 프로그램의 후속 실행에서 메모리로 읽혀지면 모든 프로그램 변수가 동일한 메모리 위치에 있다는 것을 보장 할 수 없기 때문입니다.

이전에 저장된 정보로 .dat 파일을 열어 구조 배열로 읽으려고하면 어떻게 될지 확신합니다.

제 질문을 명확히하는 데 도움이 될 경우 제 코드 예제를 보낼 수 있습니다. 제안 사항을 보내 주시면 감사하겠습니다. (난 당신의 코드를 가지고 있지 않기 때문에) 일반적으로

+0

문제를 확인하려면 실제 코드를 확인해야합니다. –

+1

책을 계속 읽으십시오. 모든 질문에 대한 대답은 다음 섹션에서 다루게 될 것입니다. –

+0

@ Industrial-antidepressant : 그 태그는 더 이상 사용되지 않습니다 : http://meta.stackexchange.com/questions/147100/the-homework-tag-is-now-official-deprecated –

답변

0

당신은 일반적으로 단지 파일에 구조체 또는 클래스의 바이트 쓰기 안 두 가지 이유가있다 : 언급 한 책으로

  • 을 쓰기 디스크에 대한 포인터는 무의미하다. 왜냐하면 그 주소에 데이터가 아닌 임의의 주소 만 저장하고 있기 때문이다. 데이터 자체를 작성해야합니다.

  • 당신 특히 fwrite(file, myStruct, sizeof(myStruct)) 같은 모든 번 구조체/클래스를 작성하려고 시도해서는 안된다. 컴파일러는 때때로 구조체의 변수 사이에 빈 바이트를 넣어 프로세서가 더 빠르게 읽을 수있게합니다.이 코드를 padding이라고합니다. 다른 컴파일러를 사용하거나 다른 컴퓨터 아키텍처 용으로 컴파일하면 구조가 다르게 패딩 될 수 있으므로 한 컴퓨터에서 올바르게 열리는 파일이 다른 컴퓨터에서 제대로 열리지 않을 수 있습니다.

바이너리 형식 또는 XML과 같이 사람이 읽을 수있는 형식으로 파일에 데이터를 쓸 수있는 방법은 많습니다. 사용하는 방법에 관계없이 (각각 장단점이 있음) 모든 데이터에는 관심있는 데이터를 하나씩 작성한 다음 하나씩 차례로 읽는 것이 포함됩니다. Java 또는 C#과 같은 고급 언어는 객체에 대한 메타 데이터를 저장하여이를 자동으로 수행 할 수있는 방법이 있지만 더 많은 메모리 사용과 느린 프로그램 실행이 필요합니다.

+1

고마워. 모두에게 코멘트! 나는 그 다음날 일하도록했다. 다음 번에는 질문에 코드를 포함 할 것입니다. –

관련 문제