#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id;
char * title;
} Book;
void freeBooks(Book * v, int num);
void addRecord(Book** v, int *records_num, const Book * b)
{
// Reserve new space and copy
Book
* temp
= (Book
*) malloc( sizeof(Book
) * ( *records_num
+ 1 ) );
if ( *v != NULL ) {
memcpy( temp
, *v
, ( *records_num
) * sizeof( Book
) ); }
*v = temp;
// Add new book
(*v)[ *records_num ].id = b->id;
(*v)[ *records_num ].title = strdup( b->title );
++( *records_num );
}
void freeBooks(Book * v, int num)
{
int i = 0;
for(; i < num; ++i) {
}
}
void showBooks(Book * v, int num)
{
int i = 0;
for(; i < num; ++i) {
printf( "\n%d: '%s'", v
[ i
].
id, v
[ i
].
title ); }
return;
}
int main(void) {
Book * books = NULL;
Book b1;
Book b2;
Book b3;
int num = 0;
// Prepare books
b1.id = 1;
b1.title = "Moby Dick";
b2.id = 2;
b2.title = "War and peace";
b3.id = 3;
b3.title = "Anna Karenina";
// Add them to the vector
addRecord( &books, &num, &b1 );
addRecord( &books, &num, &b2 );
addRecord( &books, &num, &b3 );
// Show all books
showBooks( books, num );
// Finish
freeBooks( books, num );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKIHR5cGVkZWYgc3RydWN0IHsKICAgaW50IGlkOwogICBjaGFyICogdGl0bGU7CiB9IEJvb2s7Cgogdm9pZCBmcmVlQm9va3MoQm9vayAqIHYsIGludCBudW0pOwoKIHZvaWQgYWRkUmVjb3JkKEJvb2sqKiB2LCBpbnQgKnJlY29yZHNfbnVtLCBjb25zdCBCb29rICogYikKIHsKCS8vIFJlc2VydmUgbmV3IHNwYWNlIGFuZCBjb3B5CiAgICBCb29rICogdGVtcCA9IChCb29rICopIG1hbGxvYyggc2l6ZW9mKEJvb2spICogKCAqcmVjb3Jkc19udW0gKyAxICkgKTsKCiAgICBpZiAoICp2ICE9IE5VTEwgKSB7CiAgICAgICAgbWVtY3B5KCB0ZW1wLCAqdiwgKCAqcmVjb3Jkc19udW0gKSAqIHNpemVvZiggQm9vayApICk7CiAgICAgICAgZnJlZSggKnYgKTsKICAgIH0KCiAgICAqdiA9IHRlbXA7CgogICAgLy8gQWRkIG5ldyBib29rCiAgICAoKnYpWyAqcmVjb3Jkc19udW0gXS5pZCA9IGItPmlkOwogICAgKCp2KVsgKnJlY29yZHNfbnVtIF0udGl0bGUgPSBzdHJkdXAoIGItPnRpdGxlICk7CiAgICArKyggKnJlY29yZHNfbnVtICk7Cn0KCnZvaWQgZnJlZUJvb2tzKEJvb2sgKiB2LCBpbnQgbnVtKQp7CglpbnQgaSA9IDA7CgoJZm9yKDsgaSA8IG51bTsgKytpKSB7CgkJZnJlZSggdlsgaSBdLnRpdGxlICk7Cgl9CgoJZnJlZSggdiApOwp9Cgp2b2lkIHNob3dCb29rcyhCb29rICogdiwgaW50IG51bSkKewogICAgaW50IGkgPSAwOwoKICAgIGZvcig7IGkgPCBudW07ICsraSkgewogICAgICAgIHByaW50ZiggIlxuJWQ6ICclcyciLCB2WyBpIF0uaWQsIHZbIGkgXS50aXRsZSApOwogICAgfQoKICAgIHByaW50ZiggIlxuIiApOwogICAgcmV0dXJuOwp9CgppbnQgbWFpbih2b2lkKSB7CglCb29rICogYm9va3MgPSBOVUxMOwoJQm9vayBiMTsKCUJvb2sgYjI7CglCb29rIGIzOwoJaW50IG51bSA9IDA7CgoJLy8gUHJlcGFyZSBib29rcwoJYjEuaWQgPSAxOwoJYjEudGl0bGUgPSAiTW9ieSBEaWNrIjsKCWIyLmlkID0gMjsKCWIyLnRpdGxlID0gIldhciBhbmQgcGVhY2UiOwoJYjMuaWQgPSAzOwoJYjMudGl0bGUgPSAiQW5uYSBLYXJlbmluYSI7CgoJLy8gQWRkIHRoZW0gdG8gdGhlIHZlY3RvcgoJYWRkUmVjb3JkKCAmYm9va3MsICZudW0sICZiMSApOwoJYWRkUmVjb3JkKCAmYm9va3MsICZudW0sICZiMiApOwoJYWRkUmVjb3JkKCAmYm9va3MsICZudW0sICZiMyApOwoKCS8vIFNob3cgYWxsIGJvb2tzCglzaG93Qm9va3MoIGJvb2tzLCBudW0gKTsKCiAgICAvLyBGaW5pc2gKCWZyZWVCb29rcyggYm9va3MsIG51bSApOwoJcmV0dXJuIDA7Cn0K