IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

propriétés du sizeof


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut propriétés du sizeof
    bonjour tout le monde,
    je travaille sur une partie de code où je manipule des chaînes de caractères.
    Quand je demande la taille (sizeof) de "devoirs," il me retourne 4. Je croyais que le sizeof d'une char c'était un octet, pourquoi je n'ai pas le résultat:8 ?
    Merci

    P.S: déclaration --> char *ligne_a_lire;
    valeur de la variable au moment de l'exécution "devoirs"
    instruction --> sizeof(ligne_a_lire);

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ladygtk
    bonjour tout le monde,
    je travaille sur une partie de code où je manipule des chaînes de caractères.
    Quand je demande la taille (sizeof) de "devoirs," il me retourne 4. Je croyais que le sizeof d'une char c'était un octet, pourquoi je n'ai pas le résultat:8 ?
    Merci

    P.S: déclaration --> char *ligne_a_lire;
    valeur de la variable au moment de l'exécution "devoirs"
    instruction --> sizeof(ligne_a_lire);
    sizeof renvoie la taille, en nombre d'octet, de la variable ou du type de la variable.
    Donc sizeof(char) renvoie forcément 1, et non pas 8 (1 octet = 8 bits).
    Par contre sizeof(ligne_a_lire) doit te renvoyer 4 (sur ton système) car "ligne_a_lire" est un pointeur. Sur ton système, un pointeur tient dans un 32 bits, c'est a dire 4 octets.

    Si tu veux connaitre la taille d'une chaine de caratères, dans ce cas, il faut utiliser la fonction strlen().

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par crocodilex
    sizeof renvoie la taille, en nombre d'octet, de la variable ou du type de la variable.
    En nombre de bytes... Il n'y a pas d'octets en C. C'est une notion flux ou réseau...

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En nombre de bytes... Il n'y a pas d'octets en C. C'est une notion flux ou réseau...
    Ok Ok....en plus ce n'est pas la première fois que je me fais rappeler à l'ordre sur ce sujet

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut oki bytes et pas octets, dsl
    D'abord, merci à vous deux,

    Et comme g un pointeur sur ma chaîne, est-ce que j'ai juste si je fais:
    strlen(*ligne_a_lire);
    car pour avoir le contenu d'un pointeur c bien précédé d'étoile?
    Mais bon là ça buggue. Quelle est la méthode?

  6. #6
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ladygtk
    D'abord, merci à vous deux,

    Et comme g un pointeur sur ma chaîne, est-ce que j'ai juste si je fais:
    strlen(*ligne_a_lire);
    car pour avoir le contenu d'un pointeur c bien précédé d'étoile?
    Mais bon là ça buggue. Quelle est la méthode?
    Si ta chaine est déclarée ainsi :
    alors *ligne_a_lire est un caractère et non pas une chaine de caractère.

    Et comme strlen() attends une chaine, il faut lui passer ligne_a_lire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taille = strlen (ligne_a_lire);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut bit ou octet?
    Citation Envoyé par crocodilex
    Ok Ok....en plus ce n'est pas la première fois que je me fais rappeler à l'ordre sur ce sujet
    dans mes documents j'ai: un char est codé sur 8 bits. C faux?

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par ladygtk
    dans mes documents j'ai: un char est codé sur 8 bits. C faux?
    Oui, c'est codé sur au moins 8 bits. Ce peut etre plus. Il y a plethore de posts sur ce sujet sur ce forum...

  9. #9
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par ladygtk
    dans mes documents j'ai: un char est codé sur 8 bits. C faux?
    Eh bien d'après ce que j'avais compris concernant la différence entre byte et octet, c'est qu'un octet est égal à 8 bits.
    Par contre un byte a au minimun une taille de huit bits. Cela peut etre 9, 10, ..., bits. En fait ça dépend de l'architectecture du microprocesseur et donc de la taille minimale de l'objet que celui-ci peut adresser.
    Sur ton PC, le byte est égal à 8 bits, donc égal à la taille d'un octet.
    Un caractère (donc un char) étant codé sur un byte, celui ci fait aussi 8 bits (toujours sur ton architecture).
    J'espere que je ne me suis pas trompé
    Sinon Emmanuel se fera un plaisir de me corriger....

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Par défaut mon pti prog
    je lis ligne_a_lire à partir d'un fichier. Donc là g fait le changement suggéré : en déclaration --> char *ligne_a_lire[n];
    dans la fonction qui fait cette lecture, j'obtiens 'devoirs,' et la fonction me dit que cette chaîne est de longueur 9 (strlen)
    puis je repose la question sur la longueur dans le main, cette fois ça me donne 7 (strlen)
    Dois-je abandonner l'idée de passer par une fonction, où le problème vient d'ailleurs?
    Merci
    P.S: ok byte et bit c pas pareil je ne savais pas, merci pour l'info

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ladygtk
    Et comme g un pointeur sur ma chaîne, est-ce que j'ai juste si je fais:
    strlen(*ligne_a_lire);
    car pour avoir le contenu d'un pointeur c bien précédé d'étoile?
    Mais bon là ça buggue. Quelle est la méthode?
    Pourquoi * ? Un caractère ? Ca n'a aucun sens. strlen() prend l'adresse du premier élément de la chaine à mesurer.

    ligne_a_lire est un pointeur sur le premier élément d'une chaine, et sa valeur est donc l'adresse du premier élément de la chaine. C'est donc exactement ce qu'il faut passer à strlen(), donc :

    strlen (ligne_a_lire);

    est correct. Pure logique quand on connait le sens des mots...

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par ladygtk
    dans mes documents j'ai: un char est codé sur 8 bits. C faux?
    Ca peut être vrai sur certaines plateformes, faux sur d'autres. Ce n'est pas une généralité.

    La norme (qui est générale par définition) dit "un char a au moins 8 bits de large". Il existe des architectures, supportant le C, avec 8, 9, 16, 18, 32, 36 bits par char... C'est précisé par l'implémentation (le compilateur) par la macro CHAR_BIT dans le fichier <limits.h>.

    J'ai travaillé avec des DSPs où CHAR_BIT valait 16 et d'autres 32. Ce n'est donc pas un 'mythe' ou un truc pour se la péter. C'est une réalité dont il faut tenir compte, mais qui a peu de conséquences si on prend soin d'écrire du code portable.

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Citation Envoyé par crocodilex
    Eh bien d'après ce que j'avais compris concernant la différence entre byte et octet, c'est qu'un octet est égal à 8 bits.
    Par contre un byte a au minimun une taille de huit bits. [...]
    Je profite de l'occasion : comment traduit-on "octet" en anglais (en gardant le même sens que celui que tu donnes) ?

    -- EDIT 1 : DEBUT --
    Citation Envoyé par [url=http://www.m-w.com/dictionary/byte]Definition of byte (Merriam-Webster)[/url]
    Main Entry: byte
    Pronunciation: 'bIt
    Function: noun
    Etymology: perhaps alteration of 2bite
    : a unit of computer information or data-storage capacity that consists of a group of eight bits and that is used especially to represent an alphanumeric character -- compare WORD 2c
    -- EDIT 1 : FIN --

  14. #14
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par David.Schris
    Je profite de l'occasion : comment traduit-on "octet" en anglais (en gardant le même sens que celui que tu donnes) ?
    Il semblerait que ça soit "octet".

  15. #15
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par David.Schris
    Je profite de l'occasion : comment traduit-on "octet" en anglais (en gardant le même sens que celui que tu donnes) ?

    -- EDIT 1 : DEBUT --

    -- EDIT 1 : FIN --
    http://en.wikipedia.org/wiki/Octet

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Ah oui.

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par David.Schris
    Je profite de l'occasion : comment traduit-on "octet" en anglais (en gardant le même sens que celui que tu donnes) ?
    octet

    EDIT wiki : "Octet (computing), a group of 8 bits, often referred to as a byte. Often used in networks and RFC"

    Le Meriam Webster est excellent en anglais général ou journalistique, mais pas en anglais technique. La définition de byte utilisée dans le contexte du langage C (l'objet de ce forum, je le rappelle) est donnée par le document officiel (ISO) qui définit ce langage.

    Bien sûr que BYTE signifie 8 bits dans le contexte de l'assembleur x86, de même que WORD veut dire 16-bit et DWORD 32-bit. Mais dans le contexte de l'assembleur pour IA64, quel sens ont ces mots ? Et sur un Sparc ? Ou un RS6000 ?

    Il ne faut pas sortir le sens des mots de leur contexte. On est des techniciens (scientifiques, ingénieurs, peu importe), pas des journalistes...

  18. #18
    Membre émérite

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Par défaut
    Ok.

    Dans ce cas, je suppose que pas mal de personnes utilisent un terme imprécis...(ce qui ne serait pas une première : j'en fais d'ailleurs partie)

    Pour commencer à s'en rendre compte, on peut comparer le nombre de résultats retournés par http://www.google.com/codesearch?q=byte et par http://www.google.com/codesearch?q=octet ...

    Bon...fin du hors sujet.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 200
    Par défaut
    Je suis tombé par hasard sur ce post, et je me permets de réagir.

    Byte et octet, c'est la même chose !

    Il s'agit simplement du terme français ou du terme anglais.


    Emmanuel Delahaye a écrit :
    En nombre de bytes... Il n'y a pas d'octets en C. C'est une notion flux ou réseau...

    Je ne comprends pas ce que tu veux dire par là.
    Octet veut dire 8 bits ; tout comme byte.

    Pour la notion de réseau, tu confonds avec les "bauds" :http://fr.wikipedia.org/wiki/Baud

    Par contre, je suis tout à fait d'accord sur la distinction entre "Byte" et "char", ou "octet" et "char".
    "char" est un caractère. Suivant le système, un caractère pourra se coder de différentes manières. Le plus commun est la table ASCII, effectivement codée sur 8 bits, soit 1 octet.

    Je suis aussi un partisan du terme juste. Mais aussi, partisant de l'utilisation du français. Donc s'il vous plait, utilisez octet et non pas byte.

    Ouvert à toutes remarques...

    Nicolas
    Strasbourg

  20. #20
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Nico_stras
    Je suis tombé par hasard sur ce post, et je me permets de réagir.

    Byte et octet, c'est la même chose !
    Byte est un mot qui a ete invente en 1959 par Werner Buchholz avec pour definition "A group of bits sufficient to represent one character is called a byte". A l'epoque, un byte faisait generalement 6 bits. La plupart des machines utilisent de nos jours des bytes de 8 bits. Ce qui entraine la confusion avec octet.

    Un octet est utilise pour signifier un groupe de 8 bits sans aucune reference aux caracteres et c'est utilise en transmission.

    Note que octet existe en anglais aussi avec le meme sens. La traduction officielle de byte est "multiplet".

    Note que le C impose en plus de l'usage historique que les bytes aient des adresses distinctes, ce qui peut se faire de deux manieres quand l'unite adressable du processeur est importante: on utilise des pointeurs composites: adresse+n du byte dans le mot, c'est la solution classique utilisee dans les implementations de C pour des machines adressable par mot a usage general, soit on definit le byte comme ayant la meme taille que le mot, c'est la solution classique dans les cas ou le systeme n'est pas reellement destine a manipuler des caracteres (les DSP de nos jours par exemple).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ActiveX] Propriété "Picture" dans un contrôle util
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 14/12/2002, 15h59
  2. Accés rapide aux propriétés d'un Objet
    Par Alacazam dans le forum C++Builder
    Réponses: 4
    Dernier message: 28/11/2002, 21h56
  3. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. [propriétés]Option Checked
    Par psl dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/08/2002, 08h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo