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

SL & STL C++ Discussion :

Chaine avec plusieurs caractères null


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 44
    Par défaut Chaine avec plusieurs caractères null
    Bonjour à tous !

    J'ai un petit souci en voulant affecter un tableau de caractères à une string, et je me demandais s'il existait une méthode simple pour le faire.
    Le problème de la chaîne d'origine vient du fait qu'elle contient plusieurs caractères null. Ce qui fait que les opérations d'affectation à la string arrêtent la copie au premier caractère null rencontré, tronquant ainsi la chaine ...
    Un exemple :
    char szSource[8] = { '1', '\0', '2', '3', '\0', '4', '\0' };
    std::string strDest(szSource);
    strDest contient donc "1", et non pas "1 23 4". Y a-t-il un moyen de copier la chaine d'origine complète, vu qu'on connait sa taille ?

    Merci de m'avoir lu

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    std::string possède d'autres constructeurs, qui prennent deux itérateurs ou encore le nombre de caractères à copier. Il faut juste éviter celui qui ne prend qu'un const char*, et qui s'arrêtera donc au premier \0 trouvé.

  3. #3
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Ou sinon tu utillises un std::vector<char> et tu copies caractère par caractère. Pas très beau, je te l'accorde, mais au moins le problème du '\0' est réglé.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Ou sinon tu utillises un std::vector<char> et tu copies caractère par caractère. Pas très beau, je te l'accorde, mais au moins le problème du '\0' est réglé.
    Ca ne sert à rien, std::string sait tout aussi bien le faire et en moins compliqué.
    std::string n'est pas une chaîne style C, les 0 ne modifient pas son comportement si on ne le veut pas. La seule chose c'est de ne pas utiliser les fonctions qui prennent en entrée un const char*.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 44
    Par défaut
    Merci à tous les deux.
    J'ai employé la technique de Laurent (qui est quand même plus simple ), et ça marche super. J'avais oublié qu'il pouvait y avoir d'autres constructeurs que celui proposé par défaut

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Si tu fais un append de '\0' puis 'X' sur un std::string, il ne zappera pas le X? Je me coucherais moins bête ce soir....

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

Discussions similaires

  1. [OCILIB] OCI_BindString sur une chaine contenant un caractère NULL (chr(0))
    Par cobfly dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 06/08/2010, 16h24
  2. [RegEx] matcher nombre/chaine avec des caracteres NULL
    Par m0ul3sh0t dans le forum Langage
    Réponses: 17
    Dernier message: 21/11/2009, 10h03
  3. pb concaténation d'une chaine avec un caractère
    Par P'tite Nélodie dans le forum C
    Réponses: 9
    Dernier message: 06/11/2006, 19h09
  4. Construire une chaine avec plusieurs espaces vides
    Par imane_bennouna dans le forum Langage
    Réponses: 10
    Dernier message: 04/08/2006, 09h29
  5. [chaine] stringreplace : plusieurs caractères?
    Par ulysse66x dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2003, 16h09

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