From: Davide Z. <dav...@gm...> - 2009-06-23 08:40:49
|
Ciao ho visto ora gli aggiornamenti. In effetti non ti ho detto qual'è il problema della strcat. Il problema è che non verifica se le dimensioni delle stringhe sono corrette. Del tipo se vuoi concatenare una roba lunga 3, che al massimo tiene 10 caratteri, con una lunga 15 sicuramente vai fuori dalla prima stringa. Dovresti fare così: - prendi la prima stringa da concatenare - vedi se c'è spazio sufficiente nella stringa dest (dest->size - dest->length) - c'è spazio sufficiente? SI: continua NO: rialloca la stringa (non so se conviene raddoppiare la dimensione) - concatena la stringa usando strcat e ripeti così per tutte le stringhe. Alla fine del ciclo l'unico campo della stringa che devi aggiornare è length (e va bene usando strlen), mentre size si presuppone che tu lo aggiorni ogni volta che riallochi la stringa. Sarebbe intelligente fare una funzione uStringRealloc (uString *, int) che rialloca una stringa. Non è sbagliato ma solo una curiosità: come mai sulla uStringRead alla fine hai usato la getc? Ho visto che su sourceforge non si vedono le email (nel senso non si riesce a vedere cosa contiene l'email) perchè sono in html. Bene d'ora in poi, se ci ricordiamo, solo formato testo! |