|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
[C] problema con puntatori e stringhe
Ragazzi ho una funzione che fa un inserimento in lista:
Codice:
listaGrattacielo* inserisci(listaGrattacielo *p, int pos_i,int pos_f,float h,char *n)
{
printf("%s nome da assegnare al grattacielo\n",n);
listaGrattacielo *q = malloc(sizeof(listaGrattacielo)); /* creo il nodo*/
if(!q) {
fprintf(stderr,"Errore nell'allocazione del nuovo elemento\n");
exit(-1);
}
q->nome = n; /* Assegno le variabile passate come parametro*/
q->pos_iniziale = pos_i;
q->pos_finale = pos_f;
q->altezza = h;
q->next = p;
return q; /*ritorno la lista aggiornata*/
}
Codice:
fscanf(p,"%s",&linea);
if(strcmp(linea,"new")==0){
fscanf(p,"%s",stringa); /*inserimento grattacielo*/
fscanf(p,"%d",&posi);
fscanf(p,"%d",&posf);
fscanf(p,"%f",&altezza);
Grattacieli = inserisci(Grattacieli,posi,posf,altezza,stringa);
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... Ultima modifica di matteo.pata : 23-04-2010 alle 17:08. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Un char * è un puntatore, quindi contiene un indirizzo di memoria.
Ci puoi far vedere come hai dichiaro e allocato stringa e line ? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
char stringa[120];
char linea[120] le ho dichiarate così...
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
fscanf(p,"%s",&stringa); /*inserimento grattacielo*/
Senza & direi.. Discorso diverso per interi float ecc.. Va che tra poco finisce il tempo per il progetto.. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Senza &...gli identificatori dei vettori sono già puntatori.
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
sisi infatti le ho tolte ma non cambia cavolo...da riga di comando va perfettamente se gli passo il file scrive sempre lo stesso nome del grattacielo e + precisamente scrive il nome che inserisco per ultimo e cambia anche tutti gli altri.Sicuramente è un problema di puntatori e indirizzi e mi sto incasinando datemi una mano please.
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
char* st1; st1=st2; semplicemente assegni l'indirizzo del puntatore, non lo copi.. Se e' questo il problema.. Da come lo descrivi direi di si, dai un occhio.. |
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
in che senso nella mia struttura dati formata così:
typedef struct listaGrattacielo{ char *nome; /* nome grattacielo*/ int pos_iniziale; /* posizione iniziale spiaggia*/ int pos_finale; /* posizione finale spiaggia*/ float altezza; /*altezza grattacielo*/ struct listaGrattacielo *next; }listaGrattacielo; poi ho la funzione inserisci scritta sopra e faccio l'assegnamento in questo modo q->nome = n dove n è il parametro passato alla funzione ed è sempre di tipo char*
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
altrimenti assegni l'indirizzo di n.. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 564
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
crasha...facendo così....
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
mmm no non è allocato con malloc....
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2005
Messaggi: 564
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
typedef struct listaGrattacielo{
char nome[200]; /* nome grattacielo*/ int pos_iniziale; /* posizione iniziale spiaggia*/ int pos_finale; /* posizione finale spiaggia*/ float altezza; /*altezza grattacielo*/ struct listaGrattacielo *next; }listaGrattacielo; E usa la strcpy per copiare le stringhe.. |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: Oct 2004
Città: Gazzada (Va)
Messaggi: 186
|
ok ho risolto il problema per leggere da file adesso il problema e da riga di comando in quanto io avevo fatto una funzione che mi leggeva il nome da riga di comando:
Codice:
char* leggiNome(char c) {
int i = 1;
char *nome = malloc(2 * sizeof(char));
while((c >= 'a' && c <= 'z')||(c=='!')||(c=='?')||(c >= 'A' && c <= 'Z')) {
nome[i - 1] = c;
nome = (char *)realloc(nome, ++i * sizeof(char)); /* Aggiungiamo un elemento */
c = getchar();
}
nome[i - 1] = '\0'; /* Fine nome */
return nome;
}
ancora un piccolo aiuto....
__________________
......IN FASE DI COSTRUZIONE PC NUOVO....... |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:14.




















