Quote Originariamente inviata da M.A.W. 1968 Visualizza il messaggio
Riguardo alla realloc(), vi sono effettivamente tre cose fondamentali che devi sapere subito:

1) Non va usata e devi dimenticarti anche della sua esistenza.

2) Non va usata e devi dimenticarti anche della sua esistenza.

3) Non va usata e devi dimenticarti anche della sua esistenza.


Escludendo le funzioni hard I/O bound (es. lettura/scrittura su supporti di massa, I/O su filestream di sistema che corrispondono a socket TCP/IP, linee e bus seriali, etc), la realloc() è la funzione in assoluto potenzialmente più inefficiente e disastrosa dal punto di vista prestazionale dell'intera libreria standard. Nessun principiante dovrebbe sognarsi di usarla, men che meno con una densità elevata di chiamate in un singolo programma. E anche i professionisti devono ricorrervi con estrema parsimonia.

Dunque, segui l'ottimo consiglio del nostro oregon, accetta la stringa di partenza in un unico buffer di ampie dimensioni, allocato staticamente, e poi divertiti a reinventare una strtok() fatta in casa per separare le varie parole, allocando dinamicamente lo spazio per ciascuna di esse.
Si, sapevo che la realloc è da cestinare, ma non me ne frega niente della qualità del programma adesso. Lo faccio per un discorso di comprensione dell'utilizzo, con cicli su cilci, puntatori etc. Quando quello che dovrò programmare avrà un senso mi ricorderò delle tre regole fondamentali da te esposte, sperando di ricordarle tutte perché sono davvero molto articolate.