Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Stringa con dimensione dinamica

    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?

  2. #2
    Mi scuso per il doppio - topic, ma ho risolto il problema.

    Questa è la soluzione (che sembra funzionare)

    codice:
    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.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.