Non sapendo la quantità di input che potrebbe arrivare da STDIN, ho provato a creare una stringa che crescesse dinamicamente in funzione in funzione dell'input che arriva.
Ho quindi inizializzato una char* a NULL, e poi ho usato realloc() all'interno di un do-while.
Inserisco il codice
A parte i controlli (assenti) in caso di errore, il programma si "blocca" sempre dopo la read, mandando in stampa l'errore BAD ADDRESS.codice:int main(int argc, char **argv) { char *buffer = NULL; int res, len = 0; //res è il risultato di read, len è la lunghezza attuale della stringa char *temp; do { temp = (char *)realloc(buffer, len+SIZE); //SIZE è il numero di char da leggere ogni volta if(temp == NULL) { perror("Errore realloc"); break; } else buffer = temp; res = read(0, (void *)&buffer[len], SIZE); if (res == -1) perror("Errore read"); else len = len + res; } while (res > 0); printf("%s", buffer); }
Perchè, dato che la realloc ha funzionato con successo?

Rispondi quotando