> void incString(char **string, char c){

Tole je bila pa GRDA, POcasna resitev.

moja verzija:

char* incString(char *string, char c){
  int a;
  a = strlen (string);
  string = realloc(*string, a+1);
  if (string != NULL){ /* Tole se izvede samo, ce je realloc uspel */
    string[a] = c;
    string[a+1] = 0;
  }
  return string;
}

Se 0 drugega, bo tole v vecini primerov prbl. 2x hitrejse od prejsnje
resitve - manj strcpy-jev in manj strlen-ov, ki
oboji pregledajo sel string.

Je pa tudi tole se vedno grda resitev, ker izvaja sistemske klice
ob vsakem dodajanju char-a.
To je grda, pocasna resitev. Pravilna resitev bi bila, 
da vsakic, ko rabis malo vec RAMa, alociras nov kos - recimo
4K spomina, ki ga potem polnis. Ko ga zmanjka, vajo ponovis.
Ce bo to dodajanje redko ali velikost stringa tako majhna, da lahko
celega alociras na zacetku, se ti tole niti ne izplaca.

Klici OSa so namrec vecinoma pocasni, zato se jih splaca omejiti.

Reply via email to