Est-il possible de lancer un caractère * sur une structure?

Voici mon problème, l’un des parameters de rcvfrom () est un char * et une fois que j’ai obtenu les données, je veux le convertir en struct. Cependant, la dissortingbution est infructueuse. Qu’est-ce que je fais mal?

Voici ce que j’ai fait:

struct { int8_t seq; int8_t ack; bool flag; char data[payload]; }r_pckt; //...bunch of codes char *buf = NULL; buf = (char *)malloc (sizeof(char) * MTU); memset(buf, 0, MTU); //... res = recvfrom(socket_fd, buf, MTU, 0,(struct sockaddr *) &cli_addr, (socklen_t *)&cli_len); //.. r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

Et ça ne marche pas. Des idées? Merci.

 typedef struct { int8_t seq; int8_t ack; bool flag; char data[payload]; } r_pckt; 

Ce qui précède fait de r_pckt un type et non une variable. Ensuite,

 r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

devrait être

 r_pckt *tmp_pckt = (r_pckt *) buf; 

r_pckt n’est pas un nom de structure, mais un nom de variable. Essayer

 struct r_pckt { int8_t seq; int8_t ack; bool flag; char data[payload]; }; 

Et oui, Mark a raison, vous avez besoin de non et là.

PS En fait, quand “ça ne marche pas”, cela vous donne également des messages d’erreur significatifs qui méritent d’être lus.

Vous devez supprimer le & dans le casting. Et (comme d’autres l’ont déjà souligné), vous avez une incohérence dans la définition de la structure et la déclaration de variable. Je pense que la plupart des compilateurs comprendraient cela, alors je suspecte une erreur de copier / coller lors de la publication de la question.

 struct r_pckt *tmp_pckt = (struct r_pckt *) buf; 
 r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

devrait être:

 r_pckt *tmp_pckt = (struct r_pckt *) buf; 

La variable buf est un type de pointeur et pointe déjà vers la mémoire allouée via malloc. Prendre l’adresse de celui-ci vous donne l’adresse de la mémoire contenant l’adresse de vos données.

edit: corrige également la déclaration de structure selon le post de Michael et vous serez configurés.