pb d'utilisation de fseek - C - Programmation
Marsh Posté le 14-09-2006 à 12:20:46
Déjà, utiliser SEEK_SET plutôt que "0" pour le troisième argument me semblerait plus judicieux.
Ensuite, le paramètre offset est de type long. Ici, 8L dit juste "8, qui est un long", le type de la variable ne modifie pas sa valeur. La définition de fseek() est claire : le paramètre offset désigne un nombre de bytes, à partir de la position donnée par le troisième paramètre (SEEK_SET, SEEK_CUR ou SEEK_END).
Donc, cette ligne place le curseur au 8e byte (et non octet) à partir du début du fichier.
sandra771 a écrit : (vu qu'un long vaut 4 octets) |
Sur ta machine, peut-être. Mais ce n'est pas un cas général !
La norme définit que la plage minimum d'un long est "-2147483647 => 2147483647", selon les machines ça peut être plus.
Marsh Posté le 14-09-2006 à 13:38:39
Merci pour la réponse, mais je pensais que byte et octet c'était la même chose???
Sinon, comment puis-je savoir la plage d'un type sur ma machine?
Sandra
Marsh Posté le 14-09-2006 à 13:58:13
sandra771 a écrit : Merci pour la réponse, mais je pensais que byte et octet c'était la même chose??? |
L'octet désigne 8 bits. Le byte désigne la plus petite plage adressable.
Cet article explique très bien la différence : http://fr.wikipedia.org/wiki/Byte
sandra771 a écrit : Sinon, comment puis-je savoir la plage d'un type sur ma machine? |
A l'aide de sizeof, qui te retourne le nombre de byte d'un type donné, tu peux déduire la taille d'un type sur ta machine. Mais il vaut mieux tout simplement s'en tenir à la norme et considérer la plage minimale définie comme étant celle effectivement disponible.
Les cas où tu dois connaître la taille effective d'un type ne sont pas courants.
Marsh Posté le 14-09-2006 à 14:46:06
Elmoricq a écrit : ... la plage minimum d'un long est "-2147483647 => 2147483647"... |
-2147483648 => 2147483647...
Marsh Posté le 14-09-2006 à 14:47:24
Elmoricq a écrit : L'octet désigne 8 bits. Le byte désigne la plus petite plage adressable. |
Byte = octet en anglais
1 octet = 1 byte = 8 bits
Marsh Posté le 14-09-2006 à 14:50:36
mbarekh a écrit : Byte = octet en anglais |
Cher inconnu, je crains que tu ne fasses erreur. Déjà il ne faut pas croire que parce qu'un mot dans une langue est remplacé par un mot dans une autre langue que l'un est l'exacte traduction de l'autre. par exemple, les anglosaxons emploient le mot "free" là où nous employons le mot "libre". Or les deux ne se traduisent pas l'un par l'autre.
Par ailleurs, as-tu pris la peine d'aller consulter le lien fourni par Elmoricq (http://fr.wikipedia.org/wiki/Byte) ? Il est dommage que les contributions de certains ne soient pas plus prises en considérations par d'autres. Cela amène des erreurs regrettables au sein de ce forum et les débutant(e)s pourraient en faire les frais !!!
Marsh Posté le 14-09-2006 à 14:53:35
Sve@r a écrit : Non !!! |
Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours.
et essaie d'être un peu plus poli stp!
Marsh Posté le 14-09-2006 à 14:56:10
Sve@r a écrit : -2147483648 => 2147483647... |
Tu es sûr ?
http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf
Page 22 :
Citation : minimum value for an object of type long int |
Marsh Posté le 14-09-2006 à 14:57:37
mbarekh a écrit : Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours. |
Aucune raison de ne pas utiliser la terminologie exacte. Ca ne fait pas appel à des notions compliquées, c'est mieux que de se vautrer dans l'erreur, et il n'y a aucune raison pour qu'un byte == 8 indéfiniment.
Marsh Posté le 14-09-2006 à 15:08:07
mbarekh a écrit : ...et essaie d'être un peu plus poli stp! |
T'as tout à fait raison. J'ai donc réécrit mon post...
Marsh Posté le 14-09-2006 à 15:10:29
Elmoricq a écrit : Tu es sûr ? |
Ben j'ai bêtement compté les nombres possibles sur 31 bits
Marsh Posté le 14-09-2006 à 16:18:08
Sve@r a écrit : Ben j'ai bêtement compté les nombres possibles sur 31 bits |
J'veux pas dire d'anerie, mais est-ce que la norme défini "-(2^31 - 1) " comme limite inférieure, pour laisser libre ce qu'on fait de 0x80000000, qui pose un peu problème (t'as 0x00000000 qui est zéro, et 0x80000000 qui est zéro aussi, mais "négatif" ) ?
Et du coup plein d'implémentations fonctionnent avec un nombre négatif de plus que de nombres positifs, à cause de ça ?
Bon je suis pas du tout sûr de ce que j'avance...
Marsh Posté le 14-09-2006 à 16:42:50
Sve@r a écrit : -2147483648 => 2147483647... |
Non. Ca c'est quand l'implémentation est de type 'complément à deux'. Le cas général minimum garanti est bien
-2147483647 .. +2147483647
(sign + magnitude, complément à 1) ...
Suffit de lire la norme...
Marsh Posté le 14-09-2006 à 16:44:52
mbarekh a écrit : Byte = octet en anglais |
C'est la journée des bêtises...
Un octet fait exactement 8 bits.
En C, un byte fait au moins 8 bits (et exactement CHAR_BIT bits pour une implémentation donnée : <limits.h> ). Il n'y a pas d'octets (du moins de façon portable).
En télécom (réseaux etc.), il y a des octets.
Marsh Posté le 14-09-2006 à 16:53:03
sandra771 a écrit : Sinon, comment puis-je savoir la plage d'un type sur ma machine? |
Tout est défini dans le <limits.h> de ton implémentation.
CHAR_BIT
INT_MIN
INT_MAX etc.
Afin d'être portable, je conseille néanmoins de s'en tenir aux minima définis par la norme :
http://mapage.noos.fr/emdel/init_c.htm#type
Marsh Posté le 14-09-2006 à 16:55:56
mbarekh a écrit : Inutile de lui compliquer la vie avec de telles précisions. Un byte peut être considéré comme un octet à nos jours. |
Ben pas sur le très actuel DSP TMS320C64 de Texas Instrument où il fait 16 bits...
Ne pas oublier que la plupart des applications réelles (pas scolaires) écrites en C tournent sur des plateformes plus ou moins exotiques. Y'a pas que le PC dans la vie...
Marsh Posté le 14-09-2006 à 11:53:37
Bonjour,
Je souhaiterais savoir ce que fait la commande suivante:
fseek(fichier, 8L, 0)
Depuis le début de fichier, on se déplace de 8 octets ou bien de 32 octets? (vu qu'un long vaut 4 octets)
Merci!
S.