Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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?
()
Newbie
Messaggi: Iscritto:
Postato alle 18:08
Giovedì, 04/06/2009
dichiarando semplicemente
char *variabile;
stai dichiarando un puntatore ad un char^^
Ma devi dargli un indirizzo di memoria a cui punntare
Quindi devo per forza dichiarare anche nelle funzioni dove passo per parametro la char??? perchè ho provato a lasciarla così (cioè char <identificatore>[100] mentre nelle funzioni char *<identificatore>... mi dà come effetto collaterale cioè quando salvo nella in una struttura...che succede? tutti gli elementi inseriti vengono tutte modificate assumendo l'ultima stringa inserita.
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
"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.
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'
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).
Ma perchè devo usare queste cose cioè dichiarare la dimensione o allocare... ma se la funzione gets() sta pure scritto che legge fino al terminatore o newline in questo caso che serve a me. Perchè non funziona? :|