Optimisation memcpy

Résolu
cedoli Messages postés 58 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 13 avril 2007 - 20 mars 2007 à 16:18
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 21 mars 2007 à 16:08
Bonjour à tous
Est-il possible de faire ce que je fais en trois ligne, en une ligne ?
Donc je remplis mon array en 2 lignes puis je l'envois en arguments d'une fontion.
<hr size="2" width="100%" />memcpy(&sendData,&lonmsg, sizeof(lonmsg));
memcpy(&sendData[sizeof(lonmsg)],&inout, sizeof(inout));
fill_send_msg(&sendData, sizeof(lonmsg)+sizeof(inout));
<hr size="2" width="100%" />
Merci d'avance :)
A voir également:

5 réponses

hisoka67 Messages postés 8 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 20 mars 2007
20 mars 2007 à 22:55
Non.

(C'est pas très constructif je sais, mais quand tu veux concaténer plusieurs buffers il faut faire plusieurs memcpy, c'est comme ca)
3
cedoli Messages postés 58 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 13 avril 2007
20 mars 2007 à 23:21
merci :)
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 mars 2007 à 01:57
Moi, je comprend rien à ton code:

memcpy(&sendData,&lonmsg, sizeof(lonmsg)); ???????????

& signifie que tu donne l'adresse de la variable. Il ne s'agit donc pas d'un pointeur je me trompe ? Dans ce cas, pourquoi utiliser memcpy ? Bien plus simple de faire sendData = lonmsg;

Ensuite, tu fais:
memcpy(&sendData[sizeof(lonmsg)],&inout, sizeof(inout));
Oulalalalalalala mais c'est quoi ça ?
&sendData[sizeof(lonmsg)]. Ça compile ça ? J'ai jamais essayé de faire ça. Quoi qu'il en soit, ça veut dire que tu va à l'emplacement de sendData et que tu te déplace dans la mémoire de +sizeof(lonmsg) pour y ajouter inout. Ça sens le crash à plein nez ça.

D'après moi, sendData, lonmsg et inout sont des pointeurs c'est bien ça ? N'oublie pas qu'un pointeur pointe sur une adresse. & est donc inutile car tu te trouve à donner l'adresse du pointeur même (ce qui n'est pas très conseillé). Ce que tu veux donc faire devrais ressembler à ceci:

memcpy(sendData, lonmsg, strlen(lonmsg)); //<- strlen c'est seulement si il s'agit d'une chaine de caractère

Pour le memcpy(&sendData[sizeof(lonmsg)],&inout, sizeof(inout)), là j'ignore complètement ce que tu veux faire.

Si tu n'a rien compris de ce que j'ai dit: soit j'explique très mal, soit c'est trop avancé pour toi. Si les pointeurs sont encore trop avancés pour toi, replonge toi dans le livre de C et essais de bien métriser tout ce qui touche aux pointeurs. Un pointeur mal utilisé c'est comme une allumette à coté d'un baton de TNT... dans les deux cas, ça risque de faire BOOOOOOOOM!!!!

Bonne continuation.

C++ (@++)<!--
0
cedoli Messages postés 58 Date d'inscription mercredi 25 janvier 2006 Statut Membre Dernière intervention 13 avril 2007
21 mars 2007 à 09:49
bon pour commencer j'ai oublier de préciser un truc : il s'agit de neuron c : programation de microcontrolleur neuronchip.
lonmsg et inout sont des structures : c'est pourquoi j'utilise & afin de pointer vers leur adresse en mémoire.
Sendata est un array de byte.

Lorsque je fais &sendData[sizeof(lonmsg)] c'est pour me déplacer dans senddata, apres la taille de lonmsg pour ne pas 'écraser.

Voila :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 mars 2007 à 16:08
Aaaaaaaaaaaah bon. Là c'est plus clair en effet.

C++ (@++)<!--
0
Rejoignez-nous