Проблема такова:
===============================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct DBF {
int zerobyte;
int y;
int m;
int d;
unsigned long int recnum;
unsigned long int descrleng;
unsigned int recleng;
int fieldnum;
int flag;
int charkod;
};
int main()
{
FILE* F;
if ((F=fopen("test.dbf","rb"))==0) {
printf("File does not open!\n");
exit(0);
}
unsigned char datahdr[32];
DBF Header;
fread(&datahdr, sizeof(unsigned char[32]), 1, F);
Header.zerobyte=datahdr[0];
Header.y=datahdr[1];
Header.m=datahdr[2];
Header.d=datahdr[3];
// Header.recnum=datahdr[4];
memcpy((char*)Header.recnum,datahdr+4,4);
// Header.descrleng=datahdr[8];
memcpy((char*)Header.descrleng,datahdr+8,2);
// Header.recleng=datahdr[10];
memcpy((char*)Header.recleng,datahdr+10,2);
Header.fieldnum=(Header.descrleng-32)/32;
Header.flag=datahdr[28];
Header.charkod=datahdr[29];
fclose(F);
return 0;
}
============================================================
Если закоментировать все вызовы memcpy() и снять комментарии которые вы видите, то почти все в порядке, но мне из char[32] нужно извлечь long int в 4 байта. Потому решил воспользоваться memcpy(). В результате - core dumped. segmentatin fault
Вот, что я нарыл в отладчике:
=========================================
(gdb) run
Starting program: /usr/home/sandy/cpp/dbf/dd
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
0x080486cc in main ()
(gdb) where
#0 0x080486cc in main ()
#1 0x08048592 in _start ()
(gdb) up 0
#0 0x080486cc in main ()
(gdb) up 1
#1 0x08048592 in _start ()
(gdb) quit
The program is running. Exit anyway? (y or n)
=================================================
Помогите, пожалуйста, разобраться.