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 :

Manipuler des chaines avec char NUL


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut Manipuler des chaines avec char NUL
    Bonjour,

    Je suis amené à ouvrir et à manipuler des contenus de fichiers qui contiennent des caractères "NUL" (indiqué de cette façon quand le fichier est ouvert sous Notepad++) qui correspondent je pense à des "\0".

    Le problème qui se pose est que , quand je veux stocker 200 char d'un fichier dans un std::string par exemple (ce n'est qu'un exemple parmi d'autres) , et que le char NUL se trouve au 150eme char, et bien mon std::string arrête son stockage à ce char NUL (normal me direz-vous !) mais dans mon cas, il me faudrait contourner cela.

    Même problème si je veux stocker une partie de fichier dans un std::ofstream.

    Voili voilou ! J'espère que quelqu'un aura une solution

  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
    Si tu construis ton std::string à partir d'un const char*, il va forcément s'arrêter au premier 0 rencontré.
    Par contre si tu utilises le constructeur qui prend en paramètre un const char* et le nombre de caractères à copier, il les copiera tous.

    Tu peux aussi t'inspirer du code donné dans la FAQ pour lire le contenu d'un fichier.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2004
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 83
    Par défaut
    Citation Envoyé par Laurent Gomila
    Si tu construis ton std::string à partir d'un const char*, il va forcément s'arrêter au premier 0 rencontré.
    Par contre si tu utilises le constructeur qui prend en paramètre un const char* et le nombre de caractères à copier, il les copiera tous.

    Tu peux aussi t'inspirer du code donné dans la FAQ pour lire le contenu d'un fichier.

    Encore une fois merci Laurent !

    En effet, à un moment dans mon prog je passe un const char* dans un std::string, c'est ce qui posait problème.

    J'ai également utilisé le code que tu as écrit à cette page de la FAC pour créer une ouverture de fichier un peu plus propre que ce que j'avais fait !

    MErci et à bientôt

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Juste une question... comme ca... en passant.

    Est-il bien raisonnable de parler de chaînes (et à fortiori de stocker dans un std::string) si le buffer contient un \0 ?
    N'existe-t-il pas un type de 'character-buffer' ?

    Parceque bon.. c'est quand même un truc à se mélanger les pinceaux... (bug-prone...).

  5. #5
    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
    Un tableau d'octets peut tout aussi bien être un std::vector<char>. Mais std::string peut tout de même faire l'affaire, par exemple si on a besoin des fonctions de recherche ou autre. En fait tant qu'on n'utilise pas c_str() il n'y a pas de problème.

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

Discussions similaires

  1. Manipulation des chaines de caracteres
    Par black-out dans le forum ASP
    Réponses: 3
    Dernier message: 12/08/2007, 15h11
  2. Manipulation des caractères avec KSH
    Par apocalypse dans le forum Linux
    Réponses: 2
    Dernier message: 30/04/2006, 22h41
  3. Manipulation des fichiers avec fstream.
    Par Pragmateek dans le forum SL & STL
    Réponses: 4
    Dernier message: 04/04/2006, 13h12
  4. [PLSQL] Manipulation des chaines.
    Par zero d dans le forum Oracle
    Réponses: 5
    Dernier message: 14/12/2005, 18h27
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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