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 :

Longueur du chaîne par soustraction de pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Par défaut Longueur du chaîne par soustraction de pointeur
    Bonjour,

    Est-il possible de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char string[10];
    char stringb[10];
    char *a=&b[8];
    char *b=string;
     
    strncpy(stringb, string, a-b);
    Si non, pourquoi ?

    T.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    C'est possible en inversant les définitions de a et b.

  3. #3
    Membre chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Par défaut
    Houlà, j'ai fait une petit erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char string[10];
    char stringb[10];
    char *a=&string[8];
    char *b=string;
     
    strncpy(stringb, string, a-b);

  4. #4
    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 Tchetch
    Houlà, j'ai fait une petit erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char string[10];
    char stringb[10];
    char *a=&string[8];
    char *b=string;
     
    strncpy(stringb, string, a-b);
    Ça c'est bon. Mais attention, strncpy est piègeux pour les perfs, il écrit toujours a-b caractères, complètant avec des '\0' si besoin est.

  5. #5
    Membre chevronné Avatar de Tchetch
    Inscrit en
    Mars 2002
    Messages
    401
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 401
    Par défaut
    Mais mon problème est le suivant, si une implémentation définit un char comme étant 16 bits ... Est-ce que cela ne peut pas poser problème.

    Je sais pas, mais il y a quelque chose qui me dérange là dedans ...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Non, la différence entre deux pointeurs d'un type est en nombre d'objets de ce type.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  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 Tchetch
    Bonjour,

    Est-il possible de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char string[10];
    char stringb[10];
    char *a=&b[8];
    char *b=string;
     
    strncpy(stringb, string, a-b);
    Non.
    Si non, pourquoi ?
    b est utilisé avant d'être défini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char string[10];
    char stringb[10];
    char *b=string;
    char *a=b+8;
     
    strncpy(stringb, string, a-b);
    de plus, pour être valide, une soustraction de pointeur doit concerner des pointeurs sur le même objet. C'est bien la cas ici, mais c'est pas facile à voir...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2007, 15h40
  2. [RegEx] Remplacer partie d'une chaîne par le résultat d'une fonction
    Par SCalc dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2007, 09h41
  3. Chaînes de caractères et pointeurs
    Par Opérateur dans le forum C
    Réponses: 12
    Dernier message: 12/12/2006, 06h24
  4. [RegExp]Split chaîne par espaces sauf ceux entre guillemets ?
    Par Loic Desjardins dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2006, 10h33
  5. Remplacer une sous chaîne par une autre
    Par Erakis dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 10/11/2006, 09h16

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