File: Stare vježbe/vjezbe10/62__malloc_stringovi.c
/* 62__malloc_stringovi.c Rad s dinamicki alociranim stringovima, funkcija realloc. ----- Program unosi liniju po liniju s standardnog ulaza, spremajuci pritom unesene linije u jedan zajednicki string za kojeg dinamicki alocirava memorija. */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define EXTRA 20 int alocirano = 0; int popunjeno = 0; char* string = NULL; void check(void* p) { if(p == NULL) { printf("Greska u alokaciji memorije!\n"); exit(1); } } void spremi(char* s) { int len = strlen(s); if(popunjeno+len > alocirano) { /* Ukoliko je potrebno alociramo po potrebi jos memorije */ if(alocirano == 0){ string = (char*) malloc((len+EXTRA)*sizeof(char)); check(string); strcpy(string, s); alocirano += (len+EXTRA)*sizeof(char); /* Popunili smo len+1 znakova (moramo pribrojiti i terminirajuci '\0' karakter) */ popunjeno += len+1; } else { string = (char*) realloc(string, (alocirano+(len+EXTRA)*sizeof(char))); check(string); strcat(string, s); alocirano += (len+EXTRA)*sizeof(char); popunjeno += len; } } else { strcat(string, s); popunjeno += len; } printf("Alocirano: %d, popunjeno: %d\n", alocirano, popunjeno ); } void ispisi() { printf("\nIspis-> %s\n" , string); } void oslobodi() { free(string); } int main() { char line[80]; while (gets(line) != NULL) spremi(line); ispisi(); oslobodi(); return 0; }
|