si s'est bien le cas voici ma question , qu'est-ce que vous utilisez
d'habitude ?
J'ai regardé le code assembleur généré et ca donne:
-Evidemment un appelle de fonction pour (1)
-Alors que pour (2) le compilateur génère directement le code pour la copie
( ça aussi je m'y attendais)
Bon , la question c'est quand même laquel de ces formes choisir , une des
formes est déconseillée ou ca depend du contexte ?
Sylvère , qui se pose peut etre trop de questions parfois ;-)
recopie un certain nombre de bytes de l'adresse contenue dans buffer vers l'adresse contenue dans structure, ce nombre étant la taille d'un objet de type maStructure. Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
(2) structure=*((maStructure*)buffer);
ne marche pas. Tu essaies de copier un objet de type maStructure dans une adresse.
(3) structure = (maStructure *)buffer;
copie dans structure l'adresse contenue dans buffer, après avoir indiqué (inutilement, en C) qu'il fallait la considérer comme une adresse vers un objet de type maStructure. structure et buffer pointent désormais vers le même objet. Il faut que buffer soit initialisée avant de faire ça, et que structure ne pointe pas vers un objet alloué dynamiquement (sinon, c'est une fuite mémoire).
-- ___________ 2004-03-05 21:49:49 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le vendredi 5 mars 2004 à 21:32:47, Sylvère a écrit dans
fr.comp.lang.c :
tout d'abord j'aimerais être rassuré : Ces 2 ligne de code (1) et (2)
font bien la meme chose ?
Absolument pas.
maStructure *structure;
structure contient un pointeur (une « adresse ») vers un objet de type
maStructure ; du moins, ce sera le cas quand elle sera initialisée...
void* buffer;
buffer contient un pointeur (une « adresse ») vers un objet de type
indéterminé ; là encore, ce sera le cas quand elle sera initialisée...
recopie un certain nombre de bytes de l'adresse contenue dans buffer
vers l'adresse contenue dans structure, ce nombre étant la taille d'un
objet de type maStructure. Il faut que structure et buffer soiet
initialisées toutes les deux avant de faire ça.
(2) structure=*((maStructure*)buffer);
ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
(3) structure = (maStructure *)buffer;
copie dans structure l'adresse contenue dans buffer, après avoir indiqué
(inutilement, en C) qu'il fallait la considérer comme une adresse vers
un objet de type maStructure. structure et buffer pointent désormais
vers le même objet. Il faut que buffer soit initialisée avant de faire
ça, et que structure ne pointe pas vers un objet alloué dynamiquement
(sinon, c'est une fuite mémoire).
--
___________ 2004-03-05 21:49:49
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
recopie un certain nombre de bytes de l'adresse contenue dans buffer vers l'adresse contenue dans structure, ce nombre étant la taille d'un objet de type maStructure. Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
(2) structure=*((maStructure*)buffer);
ne marche pas. Tu essaies de copier un objet de type maStructure dans une adresse.
(3) structure = (maStructure *)buffer;
copie dans structure l'adresse contenue dans buffer, après avoir indiqué (inutilement, en C) qu'il fallait la considérer comme une adresse vers un objet de type maStructure. structure et buffer pointent désormais vers le même objet. Il faut que buffer soit initialisée avant de faire ça, et que structure ne pointe pas vers un objet alloué dynamiquement (sinon, c'est une fuite mémoire).
-- ___________ 2004-03-05 21:49:49 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Sylvère
Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer); ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;) donc voila rectification (2) *structure=*((maStructure*)buffer);
Il faut que structure et buffer soiet
initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer);
ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;)
donc voila rectification
(2) *structure=*((maStructure*)buffer);
Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer); ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;) donc voila rectification (2) *structure=*((maStructure*)buffer);
Serge Paccalin
Le vendredi 5 mars 2004 à 22:08:11, Sylvère a écrit dans fr.comp.lang.c :
Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer); ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;) donc voila rectification (2) *structure=*((maStructure*)buffer);
D'accord. Dans ce cas, on retrouve bien l'équivalent du memcpy().
Personnellement, je préfère l'affectation, ça me parait mieux refléter ce qu'on veut faire (recopier un objet dans un autre) ; memcpy(), c'est vraiment pour des buffers ou des tableaux.
-- ___________ 2004-03-05 22:09:44 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Le vendredi 5 mars 2004 à 22:08:11, Sylvère a écrit dans
fr.comp.lang.c :
Il faut que structure et buffer soiet
initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer);
ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;)
donc voila rectification
(2) *structure=*((maStructure*)buffer);
D'accord. Dans ce cas, on retrouve bien l'équivalent du memcpy().
Personnellement, je préfère l'affectation, ça me parait mieux refléter
ce qu'on veut faire (recopier un objet dans un autre) ; memcpy(), c'est
vraiment pour des buffers ou des tableaux.
--
___________ 2004-03-05 22:09:44
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
Le vendredi 5 mars 2004 à 22:08:11, Sylvère a écrit dans fr.comp.lang.c :
Il faut que structure et buffer soiet initialisées toutes les deux avant de faire ça.
c'est la cas
(2) structure=*((maStructure*)buffer); ne marche pas. Tu essaies de copier un objet de type maStructure dans
une adresse.
désolé j'ai oublié l'étoile que j'avais dans mon code mais ;) donc voila rectification (2) *structure=*((maStructure*)buffer);
D'accord. Dans ce cas, on retrouve bien l'équivalent du memcpy().
Personnellement, je préfère l'affectation, ça me parait mieux refléter ce qu'on veut faire (recopier un objet dans un autre) ; memcpy(), c'est vraiment pour des buffers ou des tableaux.
-- ___________ 2004-03-05 22:09:44 _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Il faut donc que les hommes commencent -'(__) par n'être pas fanatiques pour mériter _/___(_) la tolérance. -- Voltaire, 1763
Randolf Carter
Personnellement, je préfère l'affectation, ça me parait mieux refléter ce qu'on veut faire (recopier un objet dans un autre) ; memcpy(), c'est
vraiment pour des buffers ou des tableaux.
De plus l'affectation est beaucoup plus performante. On évite un appel de fonction et un bon compilateur générera des instructions de copie optimales.
-- - Randolf
Personnellement, je préfère l'affectation, ça me parait mieux refléter
ce qu'on veut faire (recopier un objet dans un autre) ; memcpy(),
c'est
vraiment pour des buffers ou des tableaux.
De plus l'affectation est beaucoup plus performante. On évite un appel
de fonction et un bon compilateur générera des instructions de copie
optimales.