用C语言处理数据库需要注意的一个问题
for(i=0;dat!=0x0d;i++)dat=fegtc(fp);
或while(fgetc(fp)!=0x0d);
这两种方法将文件指针fp定位到首记录首字节处。可是这两种定位指针的方法却是错误的,因为上面两语句实际上从库结构的第一个字节开始逐个字节地读,一直到第一个内容为0DH的字节为止。这样一旦库文件结构说明部分当中出现0DH的字节,那就会出错。以下介绍两种正确的方法:
一、若库文件共有n个字段,则文件结构说明部分长为r=32*n+33。那么就可用函数进行定位。例如,某库有20个字段,则
r=32*20+33=672,于是用
fseek(fp,673L,0)进行定位。此处的L不可少,它表示数据类型为长整型。
二、由于库结构部分的第九、十两字节记载着文件结构部分的长度,因此可用下面的C函数返回该长度值:
long ret-len(char *dbfname[])
{ short *p;
FILE *fp;
char buf[10];
fp=fopen(dbfname,"rb");
p=(short *)buf;
fread(buf,10,1,fp);
fclose(fp);
return((long)*(p+4));}
然后再用fseek()定位即可。