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

Windows Discussion :

fonction autre que strncat


Sujet :

Windows

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut fonction autre que strncat
    bonjour,

    j'ai constaté que strncat n'était pas fiable car elle tronque la chaine de caractère qu'on veut copier à partir du moment ou elle voit qu'il y a un '\0' dedans.

    est-ce qu'il existe une fonction qui a la même utilité mais sans tronquage ?

    merci

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Dans la mesure ou en C/C++ le caractère '\0' est le délimiteur de fin de chaîne, je ne vois pas en quoi elle n'est pas fiable?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Quel rapport avec Windows ? En plus ta question n'est pas claire. Reformule bien.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    en fait je veux concaténer une chaine 1 à une chaine 2. Pour cela j'utilise strncat, mais le problème c'est que je veux aussi que les caractères de fin de chaine soient pris en compte. Or strncat ne les prend pas en compte.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben si, elle les prend en compte, elle est faite pour ça.
    De plus, elle termine systématiquement la chaîne par un caractère nul, contrairement à strncpy().
    Par contre, il faut faire gaffe à la taille de buffer qu'on lui passe: Il faut la passer caractère nul non compris.

    Exemple: Concaténation à une chaîne vide (alias "safe strncpy")
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[10];
    buf[0] = '\0';
    strncat(buf, "une looooongue chaîne", ARRAYSIZE(buf)-1);
    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.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ben si, elle les prend en compte, elle est faite pour ça.
    De plus, elle termine systématiquement la chaîne par un caractère nul, contrairement à strncpy().
    Par contre, il faut faire gaffe à la taille de buffer qu'on lui passe: Il faut la passer caractère nul non compris.

    Exemple: Concaténation à une chaîne vide (alias "safe strncpy")
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[10];
    buf[0] = '\0';
    strncat(buf, "une looooongue chaîne", ARRAYSIZE(buf)-1);

    ben justement, en fait par exemple, si on met un caractère NULL en plein milieu de la chaine de caractère, ca va tronquer a l'endroit ou il y a le caractère :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char buf[10];
    buf[0] = '\0';
    strncat(buf, "une loooo \0 ongue chaîne", ARRAYSIZE(buf)-1);
     
    --> buf aura pour chaine "une loooo " au lieu de "une loooo \0 ongue chaîne"

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben, c'est fait pour.
    Une chaîne avec un caractère nul au beau milieu, ce n'est pas une chaîne C.
    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.

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par youp_db
    ben justement, en fait par exemple, si on met un caractère NULL en plein milieu de la chaine de caractère, ca va tronquer a l'endroit ou il y a le caractère
    Ben JUSTEMENT, c'est ça le rôle du caractère de FIN DE CHAINE en C.
    Citation Envoyé par youp_db
    le problème c'est que je veux aussi que les caractères de fin de chaine soient pris en compte. Or strncat ne les prend pas en compte.
    Il n'y a pas de fonction standard qui le fasse, il va falloir créer ta fonction perso, c'est pas difficile. Pour ton info, sache certaines fonctions / structures Windows manipulent des chaînes séparées par '\0' et placées dans un seul tableau (ex : "abc\0uvw\0xyz\0\0"). Par exemple pour spécifier un filtre dans OPENFILENAME, dans GetLogicalDrivesStrings, etc.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/06/2011, 14h38
  2. Réponses: 2
    Dernier message: 11/04/2011, 16h12
  3. Réponses: 22
    Dernier message: 19/01/2011, 10h00
  4. rotation image/volume autre que la fonction de base
    Par S4sha dans le forum Général Python
    Réponses: 0
    Dernier message: 18/02/2010, 12h56
  5. fonction autre que trim()
    Par akara dans le forum Langage
    Réponses: 7
    Dernier message: 09/04/2009, 15h30

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