Optimisation memcpy [Résolu]

Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007
- - Dernière réponse : SAKingdom
Messages postés
3213
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 :)
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
8
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
20 mars 2007
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 5971 internautes nous ont dit merci ce mois-ci

Commenter la réponse de hisoka67
Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007
0
Merci
merci :)
Commenter la réponse de cedoli
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom
Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007
0
Merci
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 :)
Commenter la réponse de cedoli
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
Aaaaaaaaaaaah bon. Là c'est plus clair en effet.

C++ (@++)<!--
Commenter la réponse de SAKingdom