04/06/09 14:46
Lawliet
Ciao a tutti, Vi posto il mio piccolo problema... dichiarando nel main o dove serve così: char *<identificatore>;
un array di caratteri senza dichiarare la dimensione...
e poi successivamente uso la funzione gets(char *<identificatore); prendo da tastiera una stringa di cui non so la dimensione cioè quella dichiarata prima...però.. mi fa errore, perchè?
Ci vuole per forza una variabile con dimensione dichiarata?
aaa
04/06/09 17:34
lorenzo
attento che l'operatore * indica un puntatore.
quindi passando un puntatore e modificando la sua variabile modifichi il contenuto dell'indirizzo di memoria.
per questo le altre stringhe si modificano con l'ultima inserita
posta il tuo codice che magari si capisce meglio il problema
aaa
05/06/09 14:22
Lawliet
"per questo le altre stringhe si modificano con l'ultima inserita "
Come avevo immaginato allora... quindi devo pure dichiarare la dimensione ai parametri nelle funzioni.
E scusate... non c'è un modo di dichiarare le variabili di tipo stringa senza dimensione? Ovviamente senza causare effetti collaterali?? Io vorrei che la dimensione venga assunta quando l'utente inserisce la stringa da tastiera.
aaa
05/06/09 15:32
Lawliet
Non è un solo codice, ma un progetto
comunque è semplice per far veloce:
int main()
{
char stringa[100];
gets(stringa);
add(stringa); //chiamo la funzione per aggiungere nella struttura dichiarata in un altro modulo
..
...
}
la struttura l'ho dichiarata globale e n è il numero di elementi inseriti.
void add(char *stringa)
{
strcpy(struttura[n].string, stringa)//uso per copiare nella struttura
n++;
}
Questo è un esempio veloce... facendo così come hai detto tu si incollano tutte le stringhe all'ultima inserita.
Per evitare questo devo mettere char stringa[100]; come parametro nella funzione...
Se io non voglio mettere la dimensione e farlo quando viene inserito da tastiera una stringa.. si può?
E poi tu hai utilizzato "new" questo mi sarà sfuggito... devo rileggere un attimo il libro o.O'
aaa
05/06/09 15:56
theprogrammer
La new e' del C++, mentre la richiesta e' per il C ...
Pero' non ho ancora capito la richiesta ...
La gets non prevede una dimensione per il buffer (e per questo e' comunque sconsigliabile in quanto fonte di buffer overflow) ...
Meglio la fgets (utilizzando stdin per il file) in modo da specificare la lunghezza massima del buffer. Ma il buffer deve essere COMUNQUE allocato (con la malloc nel tuo caso).
aaa