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 :

problème d'affectation de char


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Par défaut problème d'affectation de char
    Bonjour,

    j'aimerais réaliser une affectation comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char tab[512];
    typedef basic_string<char, char_traits<char>, xmem_allocator<char> > sharedstr;
    sharedstr data;
    tab = remplir_tab_ici( );
    data = tab; // cette ligne est - elle correcte ?
    sharedstr est ici un object qui se trouve sur une mémoire partagée.

    data = tab; est - elle correcte ?

    Merci d'avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur mobile iOS / Android
    Inscrit en
    Décembre 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur mobile iOS / Android
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 259
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = tab; // cette ligne est - elle correcte ?
    Tu es entrain de mettre l'adresse de ta variable tab en mémoire dans dans variable data. tab est appelé ici le pointeur constant car il pointe sur la première case de ton tableau tab[0].
    Cela dépend de ce que tu veux faire, si tu veux copier tout ton tableau de caractéres tab dans ton objet data, dans ce tu peux utiliser une boucle for parexemple.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

    N'oubliez pas de consulter les FAQ Swift, Android
    Tutoriel : Développer une application multilingue sous iOS

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Bonjour.

    Je ne sais pas quel est le comportement que tu souhaites obtenir, ni quelle est pour toi la signification de "affecter", mais il faut bien comprendre que dans l'exemple que tu donnes, la variable tab est un pointeur (sur un tableau de char). Donc lorsque tu fais:
    Tu ne copies qu'une adresse, l'adresse du pointeur tab, mais pas le contenu du tableau.

    Si tu veux copier le contenu de ton tab, il faut le faire élément par élément, ou bien utiliser la fonction copy de la stl (en-tête <algorithm>).

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonsoir,

    Je ne comprends pas les réponse précédentes, pour moi le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = tab; // cette ligne est - elle correcte ?
    est parfaitement correct à la condition que le tableau tab contienne une chaine à la C, c'est à dire se terminant par un '\0'. On aura alors le contenu de tab qui sera copiée dans la std::basic_string data.

    Exemple d'implémentation de l'opérateur d'affectation = prenant un char* dans la STL fournie avec vs2010 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    _Myt& operator=(const _Elem *_Ptr)
    {	// assign [_Ptr, <null>)
       return (assign(_Ptr));
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    _Myt& assign(const _Elem *_Ptr)		
    {
       return (assign(_Ptr, _Traits::length(_Ptr)));
    }
    On voit bien ici que si la chaine contenue dans tab ne se termine pas par un '\0" alors _Traits::length(_Ptr), qui appelle en fait strlen(), risque de faire n'importe quoi.

Discussions similaires

  1. Problème d'affectation Char String
    Par smail21 dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2007, 00h00
  2. Réponses: 19
    Dernier message: 28/10/2005, 17h29
  3. problème d'affectation de tableau ...
    Par Mike888 dans le forum C
    Réponses: 23
    Dernier message: 26/02/2005, 14h52
  4. Entier 64 bits sous linux, problème d'affectation
    Par Steki-kun dans le forum Linux
    Réponses: 2
    Dernier message: 13/01/2005, 21h10
  5. [PostgreSql] Problème de cadreage de char !!!
    Par moipastoi dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/05/2003, 18h01

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