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
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);
}
A parte i controlli (assenti) in caso di errore, il programma si "blocca" sempre dopo la read, mandando in stampa l'errore BAD ADDRESS.
Perchè, dato che la realloc ha funzionato con successo?