01/10/2018, 15:26

Tại sao lại phải cấp phá lại realloc và tại sao ko phải khác (i+1) ' như code dưới đây?

cho mình hỏi tại sao phải cấp phát lại realloc mà niếu cấp phát lại sao lây sizeof(DoVat)*(i+1)

typedef struct {
char TenDV[20];
float TL, GT;
int PA;
}DoVat;
DoVat * ReadFromFile(float *W, int *n){
 FILE *f;
 f = fopen("CaiBalo1.inp", "r");
 fscanf(f, "%f",W); // Xac dinh trong luong Ba lo
DoVat *dsdv;
dsdv=(DoVat*)malloc(sizeof(DoVat));
int i=0;
while (!feof(f)){
 fscanf(f, "%f%f",&dsdv[i].TL,&dsdv[i].GT);
 fgets(dsdv[i].TenDV,20,f);
 dsdv[i].TenDV[strlen(dsdv[i].TenDV)-1]='';
 printf("
%d",strlen(dsdv[i].TenDV));
 //printf("%s",dsdv[i].TenDV);
 printf("
%s",dsdv[i].TenDV);
 dsdv[i].PA=0;
 i++;
 dsdv=(DoVat*)realloc(dsdv, sizeof(DoVat)*(i+1));
} *n=i;
 fclose(f);
 return dsdv;
Bài liên quan
0