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