Expanded Example:
Code:
#include <stdio.h>
struct dog
{
char name[20];
char breed[20];
int length;
int weight;
};
void die(void *x)
{
if(x)
free(x);
fputs("Out of memory.", stderr);
abort();
}
int main(void)
{
size_t i, x;
struct dog *table, *tmp;
char line[256];
x = 50;
i = 0;
table = malloc(x * sizeof(*table));
if(!table)
die(0);
while(1)
{
fputs("Describe your dog: [name] [breed] [length] [weight] ", stdout);
if(!fgets(line, sizeof(line), stdin))
break;
sscanf(line, "[%20s ] [%20s ] [%d] [%d]", table[i].name, table[i].breed,
&table[i].length, &table[i].weight);
if(++i == x)
{
tmp = realloc(table, (x += 50) * sizeof(*table));
if(!tmp)
die(table);
table = tmp;
}
}
x = i;
printf("| name | breed | len.| wght|\n|____________________|_____________________|_____|_____|\n");
for(i = 0; i < x; ++i)
printf(" %20s | %20s | %3d | %3d\n", table[i].name, table[i].breed,
table[i].length, table[i].weight);
return 0;
}