Errore codice
ho provato a compilare questo codice:
#include
#include
typedef struct base{char *a;}tipo1;
int main(){
tipo1 no;
char *a;
no.a=(char *)malloc(5*sizeof(char));
a=no.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a!='\0'){
printf("%c", a);
i++;}
scanf("%d", &i);
return 0;}
e mi è uscito come output "vado" come mi sarei aspettato...
ho provato con quest'altro:
#include
#include
typedef struct base{char *a;}tipo1;
typedef struct nodo{base *x;}tipo2;
int main(){
tipo2 no;
char *a;
no->x.a=(char *)malloc(5*sizeof(char));
a=no->x.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a!='\0'){
printf("%c", a);
i++;}
scanf("%d", &i);
return 0;}
e mi è uscito questo errore:
8 C:\Users\simone\Desktop\chiedi spiegazione.cpp base operand of "->" has non-pointer type "tipo2'"
non capisco perchè...mi aspettavo che uscisse anche in questo caso come output "vado" come prima. Qualcuno cosa ho sbagliato?
#include
#include
typedef struct base{char *a;}tipo1;
int main(){
tipo1 no;
char *a;
no.a=(char *)malloc(5*sizeof(char));
a=no.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a!='\0'){
printf("%c", a);
i++;}
scanf("%d", &i);
return 0;}
e mi è uscito come output "vado" come mi sarei aspettato...
ho provato con quest'altro:
#include
#include
typedef struct base{char *a;}tipo1;
typedef struct nodo{base *x;}tipo2;
int main(){
tipo2 no;
char *a;
no->x.a=(char *)malloc(5*sizeof(char));
a=no->x.a;
a[0]='v';
a[1]='a';
a[2]='d';
a[3]='o';
a[4]='\0';
int i=0;
while (a!='\0'){
printf("%c", a);
i++;}
scanf("%d", &i);
return 0;}
e mi è uscito questo errore:
8 C:\Users\simone\Desktop\chiedi spiegazione.cpp base operand of "->" has non-pointer type "tipo2'"
non capisco perchè...mi aspettavo che uscisse anche in questo caso come output "vado" come prima. Qualcuno cosa ho sbagliato?
Risposte
Un consiglio, quando posti racchiudi il codice tra i tag appositi, in modo da renderlo più leggibile.
Occhio alla dichiarazione di "no", non è un puntatore, ma tu gli accedi come lo fosse. Inoltre "a" è dichiarato come puntatore, perciò non puoi accedere con l'operatore "." ma devi utilizzare "->".
Perciò se lasci "no" dichiarato cosi il codice diventa:
Se non ti è chiaro, chiedi pure.
PS:
Ci sono comunque altri errori, controlla bene il codice, sopratutto l'inizializzazione...
Occhio alla dichiarazione di "no", non è un puntatore, ma tu gli accedi come lo fosse. Inoltre "a" è dichiarato come puntatore, perciò non puoi accedere con l'operatore "." ma devi utilizzare "->".
Perciò se lasci "no" dichiarato cosi il codice diventa:
no.x->a = (char*) malloc(sizeof(char) * 5); a = no.x->a;
Se non ti è chiaro, chiedi pure.
PS:
Ci sono comunque altri errori, controlla bene il codice, sopratutto l'inizializzazione...
hmmm... hai ragione! ho confuso... ho provato ora a compilare come dici tu e non mi da errori però nelll'esecuzione mi si è aperta una finestra che mi dice:
"senzaTotolo1.exe (nome programma) ha smesso di funzionare Windows: si èì verificato un problema che impedisce il funzionamento corretto del programma.(blablabla...)"
e mi interrompe il programma... come mai?
"senzaTotolo1.exe (nome programma) ha smesso di funzionare Windows: si èì verificato un problema che impedisce il funzionamento corretto del programma.(blablabla...)"
e mi interrompe il programma... come mai?
Esatto, guarda il mio "PS".
Durante la compilazione non ricevi nessun warning? L'inizializzazione di "a" è corretta, ma ne manca un'altra...
Durante la compilazione non ricevi nessun warning? L'inizializzazione di "a" è corretta, ma ne manca un'altra...
"enigmagame":
Esatto, guarda il mio "PS".
Durante la compilazione non ricevi nessun warning? L'inizializzazione di "a" è corretta, ma ne manca un'altra...
e cioè? quale altra? grazie mille...
"fransis2":
e cioè? quale altra? grazie mille...
Prova ad inizializzare anche la tua "x", esattamente come hai fatto per la "a", ovviamente non usando il char ma usando il suo tipo...
In questo modo non dovresti avere nessun warning in fase di compilazione, ed il programma dovrebbe funzionare.
ma intendi dire così:
perchè anche così mi segna errore...
o sennò come? potresti apportarmi le modifiche?
#include <stdio.h> #include <stdlib.h> typedef struct base{char *a;}tipo1; typedef struct nodo{struct base *x;}tipo2; int main(){ tipo2 no; char *b; no.x->a=(char *)malloc(5*sizeof(char)); b=no.x->a; b[0]='v'; b[1]='a'; b[2]='d'; b[3]='o'; b[4]='\0'; int i=0; while (b[i]!='\0'){ printf("%c", b[i]); i++;} scanf("%d", &i); return 0;}
perchè anche così mi segna errore...
o sennò come? potresti apportarmi le modifiche?
No, basta questo: (solo la prima linea)
E' riferito al primo codice che avevi postato, ovviamente corretto come avevi già fatto.
Dovrebbe funzionare...
no.x = (base*) malloc(sizeof(base)); no.x->a = (char*) malloc(sizeof(char) * 5);
E' riferito al primo codice che avevi postato, ovviamente corretto come avevi già fatto.
Dovrebbe funzionare...
grazie mille
Di nulla
!
