PDA

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à...

cionci
20-04-2005, 02:54
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);

cipi
20-04-2005, 08:45
Oggi, 02:54
:eek: :eek: :eek:
insonnia caro cionci??? :D :D :D

71104
20-04-2005, 10:50
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

cionci
20-04-2005, 12:39
:eek: :eek: :eek:
insonnia caro cionci??? :D :D :D
No...ho lasciato il mio bot a rispondere automaticamente sul forum :D

71104
20-04-2005, 18:51
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)

cionci
20-04-2005, 18:52
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?

cionci
21-04-2005, 00:54
Era solo per fare un esempio... Io lo metterei maggiore...