#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* **************************************** array of strings */
typedef struct {
char **get;
size_t alloc;
size_t nextid;
} sdarr_t;
static int can_add(sdarr_t d) {
return (d.nextid < d.alloc);
}
sdarr_t sdarr_init(size_t nof_elems) {
sdarr_t d
= { malloc(nof_elems
* sizeof(char*)), nof_elems
, 0 }; return d;
}
int sdarr_add(sdarr_t *d, const char *str) {
int r = can_add(*d);
if(r) d->get[d->nextid++] = strdup(str);
return r;
}
void sdarr_free(sdarr_t *d) {
while(d->nextid--)
}
void sdarr_print(sdarr_t d) {
size_t i;
for(i = 0; i < d.nextid; ++i)
}
//wypelnianie calego "plecaka"
void sdarr_fill(sdarr_t *d) {
char buf[32];
while(can_add(*d)) {
sdarr_add(d,buf);
}
}
int main(void) {
//tworzymy plecak na 5 rzeczy
sdarr_t plecak = sdarr_init(5);
//dodajemy kompas
sdarr_add(&plecak,"kompas");
//wypelniamy reszte plecaka innymi rzeczami
sdarr_fill(&plecak);
//probojemy jeszcze cos zmiescic do plecaka
if(!sdarr_add(&plecak,"kanapka"))
//wypiszmy to co mamy w plecaku
sdarr_print(plecak);
//zwalniamy pamiec zajmowana przez plecak
sdarr_free(&plecak);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBhcnJheSBvZiBzdHJpbmdzICovCnR5cGVkZWYgc3RydWN0IHsKCWNoYXIgKipnZXQ7CglzaXplX3QgYWxsb2M7CglzaXplX3QgbmV4dGlkOwp9IHNkYXJyX3Q7CgpzdGF0aWMgaW50IGNhbl9hZGQoc2RhcnJfdCBkKSB7CglyZXR1cm4gKGQubmV4dGlkIDwgZC5hbGxvYyk7Cn0KCnNkYXJyX3Qgc2RhcnJfaW5pdChzaXplX3Qgbm9mX2VsZW1zKSB7CglzZGFycl90IGQgPSB7IG1hbGxvYyhub2ZfZWxlbXMgKiBzaXplb2YoY2hhciopKSwgbm9mX2VsZW1zLCAwIH07CglyZXR1cm4gZDsKfQoKaW50IHNkYXJyX2FkZChzZGFycl90ICpkLCBjb25zdCBjaGFyICpzdHIpIHsKCWludCByID0gY2FuX2FkZCgqZCk7CglpZihyKSBkLT5nZXRbZC0+bmV4dGlkKytdID0gc3RyZHVwKHN0cik7CglyZXR1cm4gcjsKfQoKdm9pZCBzZGFycl9mcmVlKHNkYXJyX3QgKmQpIHsKCXdoaWxlKGQtPm5leHRpZC0tKQoJCWZyZWUoZC0+Z2V0W2QtPm5leHRpZF0pOwoJZnJlZShkLT5nZXQpOwp9Cgp2b2lkIHNkYXJyX3ByaW50KHNkYXJyX3QgZCkgewoJc2l6ZV90IGk7Cglmb3IoaSA9IDA7IGkgPCBkLm5leHRpZDsgKytpKQoJCXByaW50ZigiJXNcbiIsZC5nZXRbaV0pOwp9CgovL3d5cGVsbmlhbmllIGNhbGVnbyAicGxlY2FrYSIKdm9pZCBzZGFycl9maWxsKHNkYXJyX3QgKmQpIHsKCWNoYXIgYnVmWzMyXTsKCXdoaWxlKGNhbl9hZGQoKmQpKSB7CgkJcHJpbnRmKCJXcGlzeiBuYXp3ZTogIik7CgkJc2NhbmYoIiUzMnMiLCZidWYpOwoJCXNkYXJyX2FkZChkLGJ1Zik7Cgl9Cn0KCmludCBtYWluKHZvaWQpIHsKCS8vdHdvcnp5bXkgcGxlY2FrIG5hIDUgcnplY3p5CglzZGFycl90IHBsZWNhayA9IHNkYXJyX2luaXQoNSk7CgkvL2RvZGFqZW15IGtvbXBhcwoJc2RhcnJfYWRkKCZwbGVjYWssImtvbXBhcyIpOwoJLy93eXBlbG5pYW15IHJlc3p0ZSBwbGVjYWthIGlubnltaSByemVjemFtaQoJc2RhcnJfZmlsbCgmcGxlY2FrKTsKCS8vcHJvYm9qZW15IGplc3pjemUgY29zIHptaWVzY2ljIGRvIHBsZWNha2EKCWlmKCFzZGFycl9hZGQoJnBsZWNhaywia2FuYXBrYSIpKQoJCXByaW50ZigicGxlY2FrIGp1eiBwZWxueVxuIik7CgkvL3d5cGlzem15IHRvIGNvIG1hbXkgdyBwbGVjYWt1CglwcmludGYoIncgcGxlY2FrdTpcbiIpOwoJc2RhcnJfcHJpbnQocGxlY2FrKTsKCS8vendhbG5pYW15IHBhbWllYyB6YWptb3dhbmEgcHJ6ZXogcGxlY2FrCglzZGFycl9mcmVlKCZwbGVjYWspOwoJcmV0dXJuIDA7Cn0K