PDA

Visualizza la versione completa : [C] Stringa con dimensione dinamica


closerToTheEdge
06-09-2011, 15:30
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


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?

closerToTheEdge
06-09-2011, 16:10
Mi scuso per il doppio - topic, ma ho risolto il problema.

Questa è la soluzione (che sembra funzionare)


int main(int argc, char **argv) {
char *stringa = NULL;

int res, len = 0;
char *temp;

do {
temp = (char *)realloc(stringa, SIZE+len);

if (temp == NULL) {
perror("Errore realloc");
break;
}
else {
stringa = temp;
}

res = read(0, &stringa[len], SIZE);
if(res == -1) {
perror("Errore read");
break;
}
else len = len + res;

}
while (res>0);


Ad ogni modo, data l'inutilità del messaggio, chiedo cortesemente (se ritenuto opportuno) la sua rimozione. Grazie.

Loading