fork(3) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct {
  6. int id;
  7. char * title;
  8. } Book;
  9.  
  10. void freeBooks(Book * v, int num);
  11.  
  12. void addRecord(Book** v, int *records_num, const Book * b)
  13. {
  14. // Reserve new space and copy
  15. Book * temp = (Book *) malloc( sizeof(Book) * ( *records_num + 1 ) );
  16.  
  17. if ( *v != NULL ) {
  18. memcpy( temp, *v, ( *records_num ) * sizeof( Book ) );
  19. free( *v );
  20. }
  21.  
  22. *v = temp;
  23.  
  24. // Add new book
  25. (*v)[ *records_num ].id = b->id;
  26. (*v)[ *records_num ].title = strdup( b->title );
  27. ++( *records_num );
  28. }
  29.  
  30. void freeBooks(Book * v, int num)
  31. {
  32. int i = 0;
  33.  
  34. for(; i < num; ++i) {
  35. free( v[ i ].title );
  36. }
  37.  
  38. free( v );
  39. }
  40.  
  41. void showBooks(Book * v, int num)
  42. {
  43. int i = 0;
  44.  
  45. for(; i < num; ++i) {
  46. printf( "\n%d: '%s'", v[ i ].id, v[ i ].title );
  47. }
  48.  
  49. printf( "\n" );
  50. return;
  51. }
  52.  
  53. int main(void) {
  54. Book * books = NULL;
  55. Book b1;
  56. Book b2;
  57. Book b3;
  58. int num = 0;
  59.  
  60. // Prepare books
  61. b1.id = 1;
  62. b1.title = "Moby Dick";
  63. b2.id = 2;
  64. b2.title = "War and peace";
  65. b3.id = 3;
  66. b3.title = "Anna Karenina";
  67.  
  68. // Add them to the vector
  69. addRecord( &books, &num, &b1 );
  70. addRecord( &books, &num, &b2 );
  71. addRecord( &books, &num, &b3 );
  72.  
  73. // Show all books
  74. showBooks( books, num );
  75.  
  76. // Finish
  77. freeBooks( books, num );
  78. return 0;
  79. }
  80.  
Success #stdin #stdout 0s 2184KB
stdin
Standard input is empty
stdout
1: 'Moby Dick'
2: 'War and peace'
3: 'Anna Karenina'