skriva ut information från en sockaddr_in C

Permalänk

skriva ut information från en sockaddr_in C

Hej,

Jag har deklarerat en struct sockaddr_in, och skulle vilja skriva ut innehållet.
ntop tar en voidpekare vilket jag inte använt tidigare, hur löser man detta?

str[INET_ADDRSTRLEN]; struct sockaddr_in sa; sa.sin_addr.s_addr = INADDR_ANY; //lokal address sa.sin_port = htons(atoi(argv[2])); sa.sin_family = AF_INET; memset(sa.sin_zero,'\0',sizeof sa); inet_ntop(AF_INET,<problem>,str,sizeof str);

Visa signatur

» Well, tough titties...

Permalänk
Medlem

är det sa du ska pula in? ser lite tokigt ut :S
Men iaf, en voidpekare skapar du som vilken pekare som helst tex:

void* tmp; int i=0; tmp=(void*)&i;

Dock tror jag att jag gjorde på nått annat vis för en jädrans massa år sedan... troligen en annan funktion.

Permalänk
Medlem
Skrivet av Dalton Sleeper:

är det sa du ska pula in? ser lite tokigt ut :S
Men iaf, en voidpekare skapar du som vilken pekare som helst tex:

void* tmp; int i=0; tmp=(void*)&i;

Dock tror jag att jag gjorde på nått annat vis för en jädrans massa år sedan... troligen en annan funktion.

I det här fallet behövs ingen temporär variabel; bara casta till void*.

Permalänk

Hm,

Jag provade med

struct sockaddr_in sa,*sb; inet_ntop(AF_INET,(void *)sb->sin_addr,str,sizeof str);

Utan framgång

Visa signatur

» Well, tough titties...

Permalänk
Medlem

Nu vet jag ju inte hur mycket kod du har skippat men du har satt sb att peka på sa? Eller ev casta direkt, tex:

(void*)&sa.sin_addr

eller liknande.

du kan ju kolla här tex, vet inte hur bra det stämmer med ditt, men dom använder funktionen:
inet_ntop(), inet_pton()

Permalänk

Tack,

inet_ntop(AF_INET,&(sa.sin_addr),str,sizeof str);

verkar fungera men jag förstår inte riktigt varför, &(sa.sin_addr) är ju inte av typen (void *).

Visa signatur

» Well, tough titties...

Permalänk
Medlem

Nää, jag vet inte heller, eller om void* tar alla typer, eller om &(...) automatiskt gör en voidpekare...
Nån annan som vet kan ju få svara på den frågan

Permalänk
Medlem
Skrivet av Ben_Dover:

Tack,

inet_ntop(AF_INET,&(sa.sin_addr),str,sizeof str);

verkar fungera men jag förstår inte riktigt varför, &(sa.sin_addr) är ju inte av typen (void *).

Eftersom du använder C, och C inte kräver explicit typecasting, så märker kompilatorn att det är två kompatibla typer (båda är pekare) och gör om konstruktionen därefter.