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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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...

  8. #8
    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?

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

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

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

+ Répondre à la discussion
Cette discussion est résolue.

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