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 :

tableau de struct qui contient un char*


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par d�faut tableau de struct qui contient un char*
    Bonjour,
    J'ai une structure test
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    struct test
    {
    	char *ch;
    	int i;
    };
    je veux avoir un tableau de struct qui contient 5 �l�ments, par exemple, de ma structure test
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    std::vector<test> v;
    void mTest()
    {
    	for(int i=0; i<5; i++)
    	{
    		char buf[255];
    		sprintf(buf,"%d",i);
     
    		//v.clear();
    		test t;
    		t.ch = buf;
    		t.i = i;
    		std::cout << t.ch << "   " << t.i << std::endl;
    		v.push_back(t);
    	}
    }
    puis dans le main j'affiche le tableau de struct
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int _tmain(int argc, _TCHAR* argv[])
    {
    	mTest();
    	for(int i=0; i<5; i++)
    	{
    		std::cout << v.at(i).ch << "   " << v.at(i).i << std::endl;
    	}
    	system("pause");
    	return 0;
    }
    le probl�me est que lorsque j'affiche les �l�ments du tableau, le contenu de la cha�ne est perdu ou je sais pas,
    voici le r�sultat
    0 0
    1 1
    2 2
    3 3
    4 4
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╚█←g☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠� ╠╠╠╠╠╠╠╠ 0
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╚█←g☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠� ╠╠╠╠╠╠╠╠ 1
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╚█←g☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠� ╠╠╠╠╠╠╠╠ 2
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╚█←g☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠� ╠╠╠╠╠╠╠╠ 3
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
    ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╚█←g☺╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠� ╠╠╠╠╠╠╠╠ 4
    Appuyez sur une touche pour continuer...
    comment puis-je corriger cette erreur
    Merci d'avance

  2. #2
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Pourquoi ne pas utiliser des std::string plut�t que des tableaux de caract�res ?

  3. #3
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    D�j�, y a-t-il une raison particuli�re pour l'utilisation d'un char * au lieu d'une std::string

    Tu t'�viterais surement bien des soucis en manipulant cette derni�re

    autrement, si pour une raison qui ne d�pend que de toi (mais que l'on pourrait sans doute d�monter ), tu te trouves face � la n�cessit� absolue d'utiliser un char *, il faut penser au fait que les collections de la stl g�rent... des copies des objets que l'on ins�re dedans (sauf quand on cr�e une collection de pointeurs)

    Il faudrait donc veiller � d�finir un constructeur par copie efficace qui effectue une "deep copy" de ch...

    en outre, et c'est sans doute le pire, buf est cr�� de mani�re statique (par opposition � "dynamique", avec new ) et arr�te donc d'exister ... � l'accolade fermante qui englobe le contenu de la boucle !

    il n'y a donc rien d'�tonnant � ce que les pointeurs ch de tes structures pointent sur des adresses invalides
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  4. #4
    Membre confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Octobre 2011
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Iran

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    std::vector<test> v;
    void mTest()
    {
            for(int i=0; i<5; i++)
            {
                    char buf[255];
                    sprintf(buf,"%d",i);
    
                    //v.clear();
                    test t;
                    t.ch = strdup(buf);
                    t.i = i;
                    std::cout << t.ch << "   " << t.i << std::endl;
                    v.push_back(t);
            }
    }
    buf est une variable locale et est perdu apr�s mtest().
    donc t.ch pointe sur une adresse invalide.
    vous pouvez utiliser strdup(). mais n'oubliez pas de lib�rer la m�moire

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Citation Envoy� par arash Voir le message
    vous pouvez utiliser strdup(). mais n'oubliez pas de lib�rer la m�moire
    Conseiller des APIs C alors que Koala a fourni tous les �l�ments de r�ponse en C++, ce n'est franchement pas une bonne id�e.

  6. #6
    Membre �clair�
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Par d�faut
    merci
    pb r�solu avec le std::string

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Tableau initialis� � 0 qui ne contient pas 0
    Par drics dans le forum D�buter
    R�ponses: 2
    Dernier message: 18/03/2011, 16h11
  2. R�ponses: 4
    Dernier message: 21/06/2010, 01h19
  3. V�rifier un champs qui contient un tableau
    Par jeremygata dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 27/05/2008, 16h39
  4. R�ponses: 3
    Dernier message: 07/06/2007, 16h03

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