|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() |
Bonjour,
J'aimerais savoir pourquoi: 1) un octet ne ferait pas forcément 8 bits (j'ai trouvé cela dans un forum quelque part sur le net), et dans quel cas on peut rencontrer ce genre de chose 2) (conséquence du 1)? ) pourquoi il y a des développeurs qui écrivent Code :
char *c = (char *)malloc(2 * sizeof(char)); Merci d'avance pour votre aide |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Inscription : novembre 2006 Messages : 15 078 ![]() |
Si, un octet contient toujours 8 bits, d'où la racine "oct"
C'est le byte qui ne fait parfois pas 8 bits. D'où le fait que octet et byte sont souvent synonymes, mais pas toujours. Pour le reste, je te renvoi vers la FAQ
__________________
J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" (Saint Huck) |
|
30
|
|
|
#3 | |
|
Membre Expert
![]() Développeur informatique Inscription : juin 2009 Messages : 1 039 ![]() |
À ma connaissance, sizeof(char) vaut toujours 1.
EDIT: c'est effectivement toujours 1, voir le point 6.5.3.4, paragraphe 3 de la norme C99. Cf: http://www.open-std.org/JTC1/SC22/WG14/www/standards Citation:
Code :
char *c = (char *)malloc(2 * sizeof(char)); On voit qu'on alloue 2 octets, mais est-ce 2 éléments d'un octet chacun, ou un élément de 2 octets ? Jette un coup d'oeil ici: http://ymettier.free.fr/articles_lma...70/lmag70.html |
|
|
|
10
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Un octet fait forcement huit bits.
Un byte ne fait pas forcement huit bits. char a pour taille 1 byte. sizeof retourne un nombre de bytes. Utiliser * sizeof(char) permet d'etre un peut plus explicite mais n'a aucun effet pratique. Un malloc idiomatique en C, c'est Sans cast et sans repetition du type. (Meme si personnellement je prefere le cast, ce n'est pas idiomatique).
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
30
|
|
|
#5 |
|
Membre Expert
![]() Développeur informatique Inscription : juin 2009 Messages : 1 039 ![]() |
Perso, je ne caste pas non plus la valeur renvoyée par malloc. C'est du void *, et ça se caste implicitement sur n'importe quel type de pointeur.
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Développeur informatique Inscription : juin 2009 Messages : 1 039 ![]() |
C'est sémantique, cela isole le type du nombre d'élément. Du coup tu as moins de risque d'erreur si tu veux changer l'un ou l'autre. De même, pour les chaînes de caractères, on a tendance à mettre + 1 dans le nombre de caractères à allouer, pour montrer qu'on a pensé à allouer de la place pour le caractère de fin de chaîne.
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Moins de risque par rapport a la methode que je preconise? Ca demande des arguments.
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
10
|
|
|
#8 | |
|
Membre Expert
![]() Développeur informatique Inscription : juin 2009 Messages : 1 039 ![]() |
Citation:
Si la méthode que tu préconises c'est: alors non, ce n'est pas plus sûr (vu que ton exemple s'adapte au changement de type de la variable), mais je trouve malloc(2 * sizeof (char)) un peu plus lisible. Question de goûts. |
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : novembre 2005 Messages : 4 970 ![]() |
Citation:
Citation:
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com