Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1538 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pb d'utilisation de fseek

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb d'utilisation de fseek

n°1442332
sandra771
Posté le 14-09-2006 à 11:53:37  profilanswer
 

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.

mood
Publicité
Posté le 14-09-2006 à 11:53:37  profilanswer
 

n°1442362
Elmoricq
Modérateur
Posté le 14-09-2006 à 12:20:46  profilanswer
 

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.

Message cité 1 fois
Message édité par Elmoricq le 14-09-2006 à 12:23:10
n°1442414
sandra771
Posté le 14-09-2006 à 13:38:39  profilanswer
 

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

n°1442426
Elmoricq
Modérateur
Posté le 14-09-2006 à 13:58:13  profilanswer
 

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.

n°1442442
sandra771
Posté le 14-09-2006 à 14:23:28  profilanswer
 

Merci pour tes explications,
Sandra

n°1442458
Sve@r
Posté le 14-09-2006 à 14:46:06  profilanswer
 

Elmoricq a écrit :

... la plage minimum d'un long est "-2147483647 => 2147483647"...


-2147483648 => 2147483647... [:aloy]

Message cité 2 fois
Message édité par Sve@r le 14-09-2006 à 14:47:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1442459
mbarekh
Posté le 14-09-2006 à 14:47:24  profilanswer
 

Elmoricq a écrit :

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
Les cas où tu dois connaître la taille effective d'un type ne sont pas courants.


 
Byte = octet en anglais
1 octet = 1 byte = 8 bits

n°1442465
Sve@r
Posté le 14-09-2006 à 14:50:36  profilanswer
 

mbarekh a écrit :

Byte = octet en anglais
1 octet = 1 byte = 8 bits


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 !!!

Message cité 1 fois
Message édité par Sve@r le 14-09-2006 à 15:07:03

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1442471
mbarekh
Posté le 14-09-2006 à 14:53:35  profilanswer
 

Sve@r a écrit :

Non !!! :non:  
 
T'es allé voir la page donnée par Elmoricq au-moins ? => : http://fr.wikipedia.org/wiki/Byte
 
Ca me tue les gens qui ramènent leur grain de sel sans avoir pris la peine de se documenter et qui, évidemment, ramènent un truc faux !!!


 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!  

n°1442475
Elmoricq
Modérateur
Posté le 14-09-2006 à 14:56:10  profilanswer
 

Sve@r a écrit :

-2147483648 => 2147483647... [:aloy]


 
Tu es sûr ? [:dawa]
 
http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf  
Page 22 :

Citation :

— minimum value for an object of type long int
LONG_MIN -2147483647 // −(2^31 − 1)
— maximum value for an object of type long int
LONG_MAX +2147483647 // 2^31 − 1

Message cité 1 fois
Message édité par Elmoricq le 14-09-2006 à 14:58:05
mood
Publicité
Posté le 14-09-2006 à 14:56:10  profilanswer
 

n°1442478
Elmoricq
Modérateur
Posté le 14-09-2006 à 14:57:37  profilanswer
 

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.
et essaie d'être un peu plus poli stp!


 
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.

n°1442491
Sve@r
Posté le 14-09-2006 à 15:08:07  profilanswer
 

mbarekh a écrit :

...et essaie d'être un peu plus poli stp!


T'as tout à fait raison. J'ai donc réécrit mon post...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1442495
Sve@r
Posté le 14-09-2006 à 15:10:29  profilanswer
 

Elmoricq a écrit :

Tu es sûr ? [:dawa]


Ben j'ai bêtement compté les nombres possibles sur 31 bits [:dawa] :sol:

Message cité 1 fois
Message édité par Sve@r le 14-09-2006 à 15:14:23

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1442535
Elmoricq
Modérateur
Posté le 14-09-2006 à 16:18:08  profilanswer
 

Sve@r a écrit :

Ben j'ai bêtement compté les nombres possibles sur 31 bits [:dawa] :sol:


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...


Message édité par Elmoricq le 14-09-2006 à 16:20:12
n°1442555
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-09-2006 à 16:42:50  profilanswer
 

Sve@r a écrit :

-2147483648 => 2147483647... [:aloy]


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...


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:47:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1442558
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-09-2006 à 16:44:52  profilanswer
 

mbarekh a écrit :

Byte = octet en anglais
1 octet = 1 byte = 8 bits


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.


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:46:42

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1442569
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-09-2006 à 16:53:03  profilanswer
 

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


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1442573
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-09-2006 à 16:55:56  profilanswer
 

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...


Message édité par Emmanuel Delahaye le 14-09-2006 à 16:57:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pb d'utilisation de fseek

 

Sujets relatifs
Win Api : L'utilisation du menu fait planter le programmeUtilisation de sed
chercher exemple simple d'utilisation de ComboBox()Utilisation de WM_PAINT
[help me] utilisation d un graph (graphedit)Batch - Erreur d'utilisation de la commande ncftpget
Utilisation D une variable dans un lien[Java] Problème de conception par rapport à l'utilisation d'une BD
Aide utilisation du logiciel Copilote[Résolu] Pb utilisation VLOOKUP
Plus de sujets relatifs à : pb d'utilisation de fseek


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR