04. november 2001 - 01:28
Der er
11 kommentarer og 1 løsning
caste til en struct i c
Jeg skal have castet en char[100] til en struct. Hvordan gør jeg det? (det var let nok at caste den anden vej - hvis det ellers virker ..)
Annonceindlæg fra Computerworld it-jobbank
04. november 2001 - 09:07
#1
Er du klar? :-) typedef struct { char a[50]; char b[50]; } mystruct; int main(int argc, char* argv[]) { char c[100]; mystruct m; m = *((mystruct *)&c); }
04. november 2001 - 12:44
#2
Det er muligt det virker, men når jeg så skal referere til fx a fra min struct i m skriver jeg så ikke fx printf(\"%s\", m.a); :-?
04. november 2001 - 13:02
#3
Jo lige præcis. Det afhænger jo selvfølgelig af, hvordan din struct ser ud.
04. november 2001 - 13:02
#4
Hvad skal du bruge det til?
04. november 2001 - 13:08
#5
Bemærk at jeg har lavet en assignment, hvilket jo blot var for at give et eksempel på typecasting
04. november 2001 - 13:28
#6
Jeg har følgende struct: typedef struct { frame_kind kind; seq_nr seq; seq_nr ack; packet info; } frame; som jeg undervejs er nødt til at caste til en char[100]. Der er begrænsninger på de forskellige var, så de burde kunne passe ind på 100bytes. Jeg caster til char ved char buf[100]; frame s; s.kind=... ...(forskellige tildelinger) buf = (char *)&s; og forsøger at caste tilbage i en anden funktion med buffer[100]; frame s; s = *((frame *)&buffer); printf(\"data %i\\n\", s.seq); med det ser ud som om seq altid er det samme .-( Er det min cast til char i starten der er forkert?
04. november 2001 - 13:34
#7
correction: buf = (char *)&s; kan ikke compileres .-( ps - hvordan smider man flere point efter dig?
04. november 2001 - 18:05
#8
Du har et link i toppen til venstre, der hedder noget med \"Tildel flere point\" Jeg skal lige spise og gå med hunden, så kigger jeg på det.
04. november 2001 - 18:06
#9
Åhh... Du har accepteret spørgsmålet, så kan du ikke give flere point. Men det gør heller ikke noget. :-)
04. november 2001 - 18:07
#10
Kan du ikke lige skrive hvad dine typer i struct\'en er defineret som?
04. november 2001 - 20:33
#11
Jeg ville nok benytte en memcpy til at flytte data mellem din struct og din char buffer - og omvendt når du modtager char bufferen igen. Din char buffer er jo en pointer og det andet er en almindelig struct variabel, så du vil få en masse bøvl. Prøv med dette (jeg har gættet på, hvad dine typedefs har været) typedef unsigned int frame_kind; typedef unsigned int seq_nr; typedef short packet[38]; typedef struct { frame_kind kind; seq_nr seq; seq_nr ack; packet info; } frame; void main(int argc, char* argv[]) { char buf[100]; frame s, t; s.kind = 123456789; s.seq = 987654321; s.ack = 42; memset(s.info, 47, 38); printf(\"%d\\n\", s.ack); memcpy(buf, &s, sizeof(s)); memcpy(&t, buf, sizeof(t)); printf(\"%d\\n\", s.ack); }
05. november 2001 - 09:19
#12
Du kunne også bruge en union: union { char somChar[100]; frame somStruct; } somJegHarLyst; Du kan som komme til begge dele sådan her: printf(\"Min struct som char: %s\", somjegHarLyst.somChar); printf(\"Min struct vha. membernavne: %d\", somJegHarLyst.somStruct.seq);
Kurser inden for grundlæggende programmering