| 
 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; }   
 
          
  
       |