Avatar billede dark. Nybegynder
13. marts 2005 - 10:31 Der er 16 kommentarer og
1 løsning

Lidt hjælp til en structs og typedef

Jeg har forsøgt at lave en struct:

struct myStruct{
    int age;
    char *navn;
};

og en typedef, som er meningen skal være en pointer til en myStruct structure:

typedef struct myStruct *myP;

Hvis jeg nu forsøger at compile følgende kode, kommer den med en fejl:
    myP *hej;
    hej->age = 19;
    hej->navn = "Peter";

og fejlen: left of '->age' must point to class/struct/union

kan nogen se hvor fejlen ligger?
Avatar billede erikjacobsen Ekspert
13. marts 2005 - 10:58 #1
Prøv med 
  myP hej;
Avatar billede dark. Nybegynder
13. marts 2005 - 11:12 #2
ja det havde jeg godt nok prøvet, men jeg kom lige i tanke om at der nok også skulle allokeres plads med malloc og vupti så virkede det :-)
Skriv et svar hvis du vil have point
Avatar billede erikjacobsen Ekspert
13. marts 2005 - 12:00 #3
Ja, du skal også lave plads til den. Jeg ville bare fixe din kompilerfejl ;)
Ingen point til mig, tak. Svar selv, accepter eget svar.
Avatar billede dark. Nybegynder
13. marts 2005 - 12:14 #4
ok. Men jeg har faktisk et andet spørgsmål. Så hvis du kan svare på det kan du få pointene :D
Hvis jeg nu havde valgt at definere hej som en pointer til en myStruct pointer som jeg vel gør ved at skrive myP *hej; Hvordan kan jeg så komme ind og definere age og navn på hej? Jeg har forsøgt med følgende:

myP *hej;
hej = (myP*)malloc(sizeof(hej));
(**hej).age = 19;
(**hej).navn = "Peter";

men det er som om den ikke får allokeret plads til en myStruct
Avatar billede erikjacobsen Ekspert
13. marts 2005 - 13:02 #5
Det du skal allokere skal jo være størrelsen på en myStruct.
Hvis du viser det hele kan jeg se om der for mange/få *-er
Avatar billede arne_v Ekspert
13. marts 2005 - 13:06 #6
måske:

myP hej;
hej = (myP)malloc(sizeof(struct myStruct));
hej->age = 19;
hej->navn = (char *)malloc(6);
strcpy(hej->navn,"Peter");
Avatar billede dark. Nybegynder
13. marts 2005 - 13:57 #7
arne_v -> jeg har fået det til at virke hvis jeg deklarerer hej som "myP hej;"  Problemet opstår hvis jeg deklarerer den som "myP *hej;"

her er hvad jeg har prøvet med:
#include <stdio.h>
#include <malloc.h>

typedef struct myStruct *myP;

struct myStruct{
    int age;
    char *navn;
};

int main(){
    myP *hej;
    hej = (myP *)malloc(sizeof(hej));
    (**hej).age = 19;
    (**hej).navn = "Peter";
    return 0;
}

og jeg får ingen kompileringsfejl. Fejlen kommer først når jeg forsøger at køre outputtet
Avatar billede erikjacobsen Ekspert
13. marts 2005 - 14:14 #8
hej er en pointer til en pointer til en struct. Hvorfor?

Du skal så allokere plads til en pointer, *og* til en struct.
Avatar billede dark. Nybegynder
13. marts 2005 - 14:21 #9
ja det giver sikkert ikke mening, men jeg forsøger at forstå structs og pointere da jeg er rimelig ny i c.
Det irriterer mig bare at jeg ikke kan få det til at virke, da jeg syntes at det burde virke det som jeg har skrevet.
Hvordan skal jeg helt præcis allokere plads så det vil fungere.
Min hesigt med 
hej = (myP *)malloc(sizeof(hej));
var at den skulle allokere plads til en myStruct. men gør den overhovedet det, eller allokerer den kun plads til en pointer til en myStruct ?
Avatar billede arne_v Ekspert
13. marts 2005 - 14:23 #10
int main(){
    myP *hej;
    hej = (myP *)malloc(sizeof(myP));
    *hej = (myP)malloc(sizeof(struct myStruct));
    (*hej)->age = 19;
    (*hej)->navn = (char *)malloc(6);
    strcpy((*hej)->navn,"Peter");
    return 0;
}

men jeg kan heller ikke se pointen
Avatar billede dark. Nybegynder
13. marts 2005 - 15:08 #11
Det kan jeg heller ikke :D
Men hvis ikke jeg kan finde ud af at lave det her så har jeg nok ikke forstået pointere og structs 100 %.
Hvad er det som følgende linier allokerer plads til ?
hej = (myP *)malloc(sizeof(myP));
*hej = (myP)malloc(sizeof(struct myStruct));
Avatar billede arne_v Ekspert
13. marts 2005 - 15:12 #12
hej = (myP *)malloc(sizeof(myP)); /* allokerer plads til en pointer til struct */
*hej = (myP)malloc(sizeof(struct myStruct)); /* allokerer plads til en struct */
(*hej)->navn = (char *)malloc(6); /* allokerer plads til navn */
Avatar billede dark. Nybegynder
13. marts 2005 - 15:16 #13
ok, men hvad er årsagen til at det stadig virker selvom jeg ikke allokerer plads til navn ?
Avatar billede arne_v Ekspert
13. marts 2005 - 15:23 #14
du bruger ikke strcpy som jeg gør
Avatar billede arne_v Ekspert
13. marts 2005 - 15:24 #15
din måde at gøre det på virker med en konstant men hvis du skifter til f.eks.
en lokal variabel så går det galt
Avatar billede dark. Nybegynder
13. marts 2005 - 16:02 #16
ok. Tak for hjælpen. gider du skrive et svar :D
Avatar billede arne_v Ekspert
13. marts 2005 - 16:03 #17
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester