Optimisation memcpy [Résolu]

Signaler
Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
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 :)

5 réponses

Messages postés
8
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
20 mars 2007

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)
Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007

merci :)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)<!--
Messages postés
58
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007

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 :)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Aaaaaaaaaaaah bon. Là c'est plus clair en effet.

C++ (@++)<!--