fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. /* **************************************** array of strings */
  6. typedef struct {
  7. char **get;
  8. size_t alloc;
  9. size_t nextid;
  10. } sdarr_t;
  11.  
  12. static int can_add(sdarr_t d) {
  13. return (d.nextid < d.alloc);
  14. }
  15.  
  16. sdarr_t sdarr_init(size_t nof_elems) {
  17. sdarr_t d = { malloc(nof_elems * sizeof(char*)), nof_elems, 0 };
  18. return d;
  19. }
  20.  
  21. int sdarr_add(sdarr_t *d, const char *str) {
  22. int r = can_add(*d);
  23. if(r) d->get[d->nextid++] = strdup(str);
  24. return r;
  25. }
  26.  
  27. void sdarr_free(sdarr_t *d) {
  28. while(d->nextid--)
  29. free(d->get[d->nextid]);
  30. free(d->get);
  31. }
  32.  
  33. void sdarr_print(sdarr_t d) {
  34. size_t i;
  35. for(i = 0; i < d.nextid; ++i)
  36. printf("%s\n",d.get[i]);
  37. }
  38.  
  39. //wypelnianie calego "plecaka"
  40. void sdarr_fill(sdarr_t *d) {
  41. char buf[32];
  42. while(can_add(*d)) {
  43. printf("Wpisz nazwe: ");
  44. scanf("%32s",&buf);
  45. sdarr_add(d,buf);
  46. }
  47. }
  48.  
  49. int main(void) {
  50. //tworzymy plecak na 5 rzeczy
  51. sdarr_t plecak = sdarr_init(5);
  52. //dodajemy kompas
  53. sdarr_add(&plecak,"kompas");
  54. //wypelniamy reszte plecaka innymi rzeczami
  55. sdarr_fill(&plecak);
  56. //probojemy jeszcze cos zmiescic do plecaka
  57. if(!sdarr_add(&plecak,"kanapka"))
  58. printf("plecak juz pelny\n");
  59. //wypiszmy to co mamy w plecaku
  60. printf("w plecaku:\n");
  61. sdarr_print(plecak);
  62. //zwalniamy pamiec zajmowana przez plecak
  63. sdarr_free(&plecak);
  64. return 0;
  65. }
  66.  
Success #stdin #stdout 0s 2384KB
stdin
kosmetyki
kanapka
piornik
ksiazki
stdout
Wpisz nazwe: Wpisz nazwe: Wpisz nazwe: Wpisz nazwe: plecak juz pelny
w plecaku:
kompas
kosmetyki
kanapka
piornik
ksiazki