View Full Version : [C] array di caratteri......
hakermatik
19-04-2005, 20:57
rinfrescatemi un pò le idee sull'allocazione dinamica...
devo acquisire un vettore di caratteri... il vettore deve essere interrotto dal carattere "#". Non conosco a priori la lunghezza della stringa che devo acquisire.
Come posso fare per allocare dinamicamente la parte di memoria da destinare al vettore??
so che devo usare il comando "malloc", ma ho bisogno di una rinfrescatina...
grazie ragà...
Devi usare malloc e poi quando hai finito la memoria allocata con malloc devi usare realloc...
Ovviamente per limitare il numero di chiamate a realloc sarebbe bene allocare la memoria a blocchi...
Mettiamo che la dimensione dei blocchi sia 16 byte...
#define BLOCK 16
char *stringa;
int cont = 0, size = BLOCK;
stringa = (char *)malloc(sizeof(char)*BLOCK);
stringa[0] = '\0'; /*carattere di fine stringa*/
Ogni volta che inserisci un carattere:
if((cont+1) >= size) /*il maggiore non si dovrebbe mai verificare*/
{
stringa = (char *)realloc(stringa, (size + BLOCK) * sizeof(char));
size += BLOCK;
}
stringa[cont] = nuovo_carattere;
stringa[cont+1] = '\0':
++cont;
Per eliminare la stringa:
free(stringa);
Oggi, 02:54
:eek: :eek: :eek:
insonnia caro cionci??? :D :D :D
LOL! :D
cari moderatori, ma perché non la eliminate l'ora dell'ultima modifica nei 3d, o almeno non la rendete visibile solo ai modders (come accade in moltissimi forums)? si tratta anche di privacy! :D
:eek: :eek: :eek:
insonnia caro cionci??? :D :D :D
No...ho lasciato il mio bot a rispondere automaticamente sul forum :D
No...ho lasciato il mio bot a rispondere automaticamente sul forum :D
asd, ma chi vuoi prendere in giro!!! :D si vede benissimo che soffri di insonnia e che hai tutti i bioritmi sfasati, infatti non hai neanche fame: hai postato alle 12:39 (ora di pranzo x me :D)
asd, ma chi vuoi prendere in giro!!! :D si vede benissimo che soffri di insonnia e che hai tutti i bioritmi sfasati, infatti non hai neanche fame: hai postato alle 12:39 (ora di pranzo x me :D)
Vedo che la tua vita è piena di lavoro :) Ero a lavoro ;)
hakermatik
20-04-2005, 21:00
Devi usare malloc e poi quando hai finito la memoria allocata con malloc devi usare realloc...
Ovviamente per limitare il numero di chiamate a realloc sarebbe bene allocare la memoria a blocchi...
Mettiamo che la dimensione dei blocchi sia 16 byte...
#define BLOCK 16
char *stringa;
int cont = 0, size = BLOCK;
stringa = (char *)malloc(sizeof(char)*BLOCK);
stringa[0] = '\0'; /*carattere di fine stringa*/
Ogni volta che inserisci un carattere:
if((cont+1) >= size) /*il maggiore non si dovrebbe mai verificare*/
{
stringa = (char *)realloc(stringa, (size + BLOCK) * sizeof(char));
size += BLOCK;
}
stringa[cont] = nuovo_carattere;
stringa[cont+1] = '\0':
++cont;
Per eliminare la stringa:
free(stringa);
grazie Cionci. Avevo gia risolto il problema con del codice simile a quello che hai riportato.
solo un chiarimento... che intendi per "dimensioni dei blocchi?? perchè proprio 16 byte?
Era solo per fare un esempio... Io lo metterei maggiore...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.