어떤 이유로 든 이전 데이터의 끝에 새 파일을 추가하여 데이터를 저장하기 위해 외부 파일 (.DAT)을 만들어야합니다.C 타입을 .DAT 파일에서 읽는 중 오류가 발생했습니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
typedef struct {
char *Name;
int Index;
} DataFile;
static FILE *file;
size_t result;
DataFile *DataTable;
file = fopen("database.DAT","ab");
DataTable = (DataFile *) malloc (sizeof(DataFile));
DataTable[0].Name = "somefile.txt";
DataTable[0].Index = 7;
printf("%s %d \n",DataTable[0].Name,DataTable[0].Index);
result = fwrite(DataTable,sizeof(DataFile),1,file);
fclose(file);
free(DataTable);
return 0;
}
위의 코드를 실행 한 후에 데이터가 올바르게 저장되었는지 확인합니다. 그래서 아래 코드를 만듭니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
typedef struct {
char *Name;
int Index;
} DataFile;
static FILE *file;
size_t result;
long size;
int i;
DataFile *DataTable;
file = fopen("database.DAT","rb");
if (file == NULL) printf("Error1");
// Determine the size of file
fseek(file,0,SEEK_END);
size = ftell(file);
rewind(file);
DataTable = (DataFile *) malloc ((size/sizeof(DataFile)) * sizeof(DataFile));
if (DataTable == NULL) printf("Error2");
result = fread(DataTable,sizeof(DataFile),size/sizeof(DataFile),file);
fclose(file);
for (i=0; i<result; i++) {
printf("%s %d \n",DataTable[i].Name,DataTable[i].Index);
}
free(DataTable);
return 0;
}
그러나, 제 2 코드 블록으로부터의 출력을
somefile.txt 7
첫 번째 코드 블록에서와
Error1 7
을 준다. .DAT 파일을 열거 나 DataTable에 메모리를 할당 할 때 오류가 발생했기 때문에 문제가 아닌 것을 알았습니다. 또한 int 형식 (인덱스) 있지만 char * 형식 (이름) .DAT 파일에서 읽을 때 작동하지 않습니다. 이 char * -type 읽기 문제 (그리고 'error1'이 어디서 왔는지)를 해결하기 위해 무엇을해야하는지 잘 모른다. (심지어 구글도 나에게 답을 준다.)
보통 'DataTable = (DataFile *) malloc (sizeof (DataFile));은'DataTable = malloc (sizeof * DataTable);으로 작성하는 것이 더 좋습니다. [C에서 malloc()의 리턴 값을 던지 지마.] (http://stackoverflow.com/a/605858/28169), 불필요하게 반복하지 마라. – unwind