Здравствуйте, мне для упражнения в университете мне нужно выделить массив таким образом. Массив у звезд имеет 1 слот. Если входов больше одного, то массив удваивается. Если входов больше 2, то он снова удваивается и т. д. После этого мне нужно обрезать массив, чтобы он соответствовал количеству входов. Например, если у меня 5 входов, то в массиве будет 8 слотов, и я должен сделать так, чтобы у него было 5 слотов, но я не могу понять, как это сделать. Вот мой код:
nameInfoT* ReadNames(int* size){
nameInfoT* names ;
int array_size=1;
int entries=0;
char input[length];
names=(nameInfoT*) malloc(sizeof(nameInfoT)*array_size);
do{
scanf("%s",input);
if(!strcmp(input,"END")) break;
if(entries==array_size){
array_size=array_size*2;
names= (nameInfoT*) realloc(names,sizeof(nameInfoT)*array_size);
}
names[entries].name=(char*)malloc(sizeof(char)*strlen(input));
strcpy(names[entries].name,input);
entries++;
}while(1);
printf("there are %d free spaces \n",array_size-entries);
*size=entries;
printf("there are %d entries \n",*size);
int i;
for(i=array_size;i>entries;i--){
free(names[i]);//here it won't compile
}
return names;
}
malloc
s. - person arshajii   schedule 06.01.2014scanf
с"%s"
! Вместо этого используйтеfgets
или POSIXgetline
. Просто из любопытства: вас учили так использоватьscanf
в вашем университете? - person mafso   schedule 06.01.2014