Je pense que c'est un problème assez simple, mais je ne peux toujours pas le comprendre.ajouter et supprimer d'un (void *) dans C
J'ai une fonction qui envoie un flux sur le réseau. naturellement, cela prend const void * comme argument:
void network_send(const void* data, long data_length)
je suis en train de préfixer un en-tête spécifique sous la forme de char * à cela avant de l'envoyer sur le socket:
long sent_size = strlen(header)+data_length;
data_to_send = malloc(sent_size);
memcpy(data_to_send,header,strlen(header)); /*first copy the header*/
memcpy((char*)data_to_send+strlen(header),data,dat_length); /*now copy the actual data*/
Cela fonctionne bien aussi longtemps que les données sont réellement char *. mais s'il change à un autre type de données, alors cela cesse de fonctionner.
Lors de la réception, j'ai besoin de supprimer l'en-tête des données avant de le traiter. voici comment il le fait:
void network_data_received(const void* data, long data_length)
{
........
memmove(data_from_network,(char*)data_from_network + strlen(header),data_length); /*move the data to the beginning of the array*/
ProcessFurther(data_from_network ,data_length - strlen(header)) /*data_length - strlen(header) causes the function ProcessFurther to read only certain part of the array*/
}
Cela fonctionne à nouveau bien si les données sont de type char. mais se bloque s'il est de type différent.
Quelqu'un peut-il suggérer comment implémenter correctement cela?
Cordialement, Khan
Comment appelez-vous ces fonctions? Pouvez-vous fournir le code? – detunized
Vous ne calculez pas data_length en utilisant 'strlen', n'est-ce pas? Est-ce vraiment la bonne fonction pour votre tête aussi? – Rup
le problème réside dans l'utilisation (char *) Data_to_Send + strlen (tête) –