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 :

Probl�me de copie de string dans string


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut Probl�me de copie de string dans string
    Bonjour,

    J'ai un petit soucis (enfin plut�t gros .. Bref). Je voudrais copier un string dans un autre string. Mon string a est d�clar� en tant qu'attribut priv� dans mon .h.Je pensais qu'en faisant simplement ce qui est ci dessous, �a pourrait marcher.
    En fait, on m'a expliqu� que je copiais l'adresse de l'objet, ce qui fait que j'ai une erreur de segmentation au passage de cette ligne de code. Ce qui est �tonnant, c'est que sous Builder, pas de soucis .. Mais l� jsuis sous Linux.

    Avez-vous une solution simple ?

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    132
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 132
    Par d�faut
    strcpy(a, b);

    Ou alors, j'ai pas bien compris ton probl�me.

  3. #3
    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 utilises std::string alors y a pas de souci. Si tu utilises des char*, alors ce sera strcpy.

    Montre nous donc un peu plus de code.

    http://c.developpez.com/faq/cpp/?page=strings

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    A priori, rien n'emp�che de faire ce que tu veux.
    Donne le code exacte, on y vera plus clair.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    Bah le probl�me est plus compliqu� alors qu'il parait ne pas y en avoir .. Il faut que je copie un string dans un autre string .. strcpy n'accepte que des chars ..

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    Extrait de mon fichier CPP
    Mon plantage se situe donc au niveau du this->ni_channel = carteNi.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void Configuration::ecrireConfigCarteNi(int choix, string carteNi)
    {
    	cout << "Valeur de l'INT en paramètre : " << choix << endl;
    	cout << "Valeur du string en paramètre : " << carteNi << endl;
     
    	switch (choix)
    	{
    		// Choix = 0, N° Channel
    		case 0 :
    		{
    			this->ni_channel = carteNi ;
    			break;
    		}
    Extrait du fichier .h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    private :
    	// ATTRIBUTs ----------------------------------------------------------------
    		// Carte NI
    		string ni_channel;
    J'ai bien �videmment v�rifier que les valeurs en param�tre de ma fonction sont bon ..

    Jcompran vraiment pas [/code]

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    As tu verifi� que l'objet Configuration sur lequel tu appeles la m�thode 'ecrireConfigCarteNi' est bien construit?

  8. #8
    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
    Effectivement, pas de quoi faire bugger un programme.

    Le debugger dit quoi exactement ? Quelle est la pile d'appels au moment o� �a plante ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    La compilation ne pose pas de probl�me mais � l'ex�cution j'ai une belle erreur de segmentation, voil� tout .. Alors en fait j'ai la solution � mon probl�me, en multipliant le nombre de m�thodes de mon programme (passer de 10 � 50) mais bon .. Ce que je n'arrive pas � comprendre c'est pourquoi un string ne peut pas etre copi� dans un autre string .. Sous Builder, pas de soucis .. Si jamais quelqu'un a une id�e .. Mais je crois bien que je vais faire mes 50 m�thodes

  10. #10
    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 kazarn
    La compilation ne pose pas de probl�me mais � l'ex�cution j'ai une belle erreur de segmentation, voil� tout
    C'est pour �a que je demandais
    Citation Envoy� par Loulou24
    Le debugger dit quoi exactement ? Quelle est la pile d'appels au moment o� �a plante ?
    Apprendre � te servir du debugger (si ce n'est pas le cas) te fera gagner un temps �norme.

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    C'est pas un probl�me de copie de string.
    Tu en as pas conscience, mais ta m�thode r�alise une autre copie de string qui ne pose pas de pobl�me:

    Suivant le prototype
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    void Configuration::ecrireConfigCarteNi(int choix, string carteNi)
    { ...
    Le param�tre carteNi est pass� par copie � la fonction.
    Si la variable � l'int�rieure de la m�thode est bonne c'est que la copie entre string fonctionne.
    Je ne sais pas si tu as compris ce que je raconte, mais ton probl�me n''est certainement pas o� tu le penses.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    Je n comprends pas tout !

    En fait, je r�cup�re bien mes valeurs (choix & carteNi). En mode console je fais 2 cout et j'obtiens bien :

    Valeur de l'INT en param�tre : 0
    Valeur du string en param�tre : 2

    Donc je ne vois pas ce qui peut poser probl�me ensuite

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    Citation Envoy� par Loulou24
    Citation Envoy� par kazarn
    La compilation ne pose pas de probl�me mais � l'ex�cution j'ai une belle erreur de segmentation, voil� tout
    C'est pour �a que je demandais
    Citation Envoy� par Loulou24
    Le debugger dit quoi exactement ? Quelle est la pile d'appels au moment o� �a plante ?
    Apprendre � te servir du debugger (si ce n'est pas le cas) te fera gagner un temps �norme.
    Pour le debugger, j'aimerais apprendre � m'en servir mais DDD n'est franchement pas g�nial et j'ai que �a .. Sous Builder j'aurais gagn� du temps .. Si jamais vous connaissez de bons debugger sous Linux, je suis preneur

  14. #14
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    Dans ce genre de sympt�me, c'est la validit� de l'objet courant qui peut �tre mis en cause.

    Donc peux-tu nous montrer le code de l'instanciation de ton objet et l'appel � ta m�thode.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    Bon, pour faire simple je vous passe le code des 3 fichiers �pur�s car entre les inlines, les new etc ..

    Configuration.h

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #ifndef _CONFIGURATION_H
    #define _CONFIGURATION_H
    #include <string>
    #include <sstream> 
    using namespace std;
    class Configuration
    {
    public :
       // ATTRIBUTs ----------------------------------------------------------------
     
       // METHODEs -----------------------------------------------------------------
       // CONSTRUCTEURs et DESTRUCTEURs
       Configuration() ;
       ~Configuration() ;
     
    	/* Lecture de la configuration de chaque élément */
    	string lireConfigCarteNi(int choix);
    	/* Ecrire la configuration de chaque élément */
    	void ecrireConfigCarteNi(int choix, string carteNi);
     
    protected :
       // ATTRIBUTs ----------------------------------------------------------------
     
       // METHODEs -----------------------------------------------------------------
     
    private :
    	// ATTRIBUTs ----------------------------------------------------------------
    		// Carte NI
    		string g_carteNi;
     
    		// Carte NI
    		string ni_channel;
    		string ni_niveauTensionMin;
     
     
       // METHODEs -----------------------------------------------------------------
     
    } ;
     
    //------------------------------------------------------------------------------
    #endif  //_CONFIGURATION_H
    //------------------------------------------------------------------------------
    Configuration.cpp

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    #include <iostream>
    #include "Configuration.h"
    #include <string>
    using namespace std;
     
    Configuration::Configuration()
    {
    }
     
    Configuration::~Configuration()
    {
    }
     
    //---------------------------------------------------------------------------
    // METHODEs PUBLIQUEs
    //---------------------------------------------------------------------------
    string Configuration::lireConfigCarteNi(int choix)
    {
    	switch (choix)
    	{
    		// Choix = 0, N° Channel
    		case 0 :
    		{
    			cout << "Valeur Channel : " << ni_channel << endl;
    			return this->ni_channel;
    		}
    		// Choix = 1, Niveau tension minimal
    		case 1 :
    		{
    			cout << "Valeur Niveau Tension Min : " << ni_niveauTensionMin << endl;
    			return this->ni_niveauTensionMin;
    		}
    		// Choix = 2, Niveau tension maximal
    		case 2 :
    		{
    			cout << "Valeur Niveau Tension Max : " << ni_niveauTensionMin << endl;
    			return this->ni_niveauTensionMax;
    		}
    	}
    }
    void Configuration::ecrireConfigCarteNi(int choix, string carteNi)
    {
    	cout << "Valeur de l'INT en paramètre : " << choix << endl;
    	cout << "Valeur du string en paramètre : " << carteNi << endl;
     
    	switch (choix)
    	{
    		// Choix = 0, N° Channel
    		case 0 :
    		{
    			this->ni_channel = carteNi ;
    			break;
    		}
    		// Choix = 1, Niveau tension minimal
    		case 1 :
    		{
    			this->ni_niveauTensionMin = carteNi;
    			cout << "Ecriture du niveau Tension Min !" << endl;
    			break;
    		}
    		// Choix = 2, Niveau tension maximal
    		case 2 :
    		{
    			this->ni_niveauTensionMax = carteNi;
    			cout << "Ecriture du niveau Tension Max !" << endl;
    			break;
    		}
    	}
    }
    FichierConfiguration.cpp

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    //------------------------------------------------------------------------------
    /** @file         FichierConfiguration.cpp
     *  @brief        Fichier Configuration XML (lecture / ecriture)
     *
     *  @author       adesmars
     *  @author       STS IRIS Lycee Nicolas APPERT, ORVAULT (FRANCE)
     *  @since        11 mar 2005 09:24:29
     *  @version      0.1
     *  @date         11 mar 2005 09:24:29
     *
     *  Description detaillee du fichier FichierConfiguration.cpp
     *
     *  Fabrication   gcc 3.3
     *
     *  @todo         Liste des choses restant a faire.
     *  @todo         Liste des choses restant a faire.
     *
     *  @bug          11 mar 2005 09:24:29 - Aucun pour l'instant
     */
    #include "FichierConfiguration.h"
    using namespace std;
     
    FichierConfiguration::FichierConfiguration()
    {
    }
     
    FichierConfiguration::~FichierConfiguration()
    {
    }
     
    void FichierConfiguration::lire()
    {
    	cout << "> Lecture du fichier XML" << endl;
    	// Création du fichier et lecture
    	QDomDocument fichier ("CONFIG");
    	QFile f("config/configuration.xml");
    	// On vérifie que le fichier n'est pas en lecture seul
        if (!f.open(IO_ReadOnly))
    	{
    		cout << "> Fichier verrouillé ou en lecture seul" << endl;
        	return;
    	}
    	// Vérification du fichier
        if ( !fichier.setContent(&f )) 
        {
    		f.close();
            return;
        }
        f.close();
    	cout << "> Création des éléments" << endl;
    	// création des éléments
      	QDomElement docElem = fichier.documentElement();
    	cout << "> Noeud racine" << endl;
    	// Noeud Racine
    	QDomNode n = docElem.firstChild();
      	if ( !n.isNull())
        {
          	// Premier noeud
    		QDomNode n1 = n.firstChild();
    		// Conversion d'un noeud en élément
          	if (!n1.isNull()) 
    		{
    	  		QDomElement e = n1.toElement(); 
    			if (!e.isNull()) 
    	    	{
    	      		QString tag = e.tagName();
    				// Affichage du nom du noeud
    				cout << "	> 1er noeud : Nom du tag : " << tag << endl; 
    			}
    			/* Ecriture & Affichage du Channel de la carte NI */
    			cout << "Ecriture & Affichage du Channel de la carte NI" << endl;
    			this->configuration->ecrireConfigCarteNi(0, n1.toElement().text());
    			cout  << "Ecrire [OK]" << endl;
    FichierConfigurationTesteur.cpp

    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
    18
     
    #include <iostream>
    #include "FichierConfiguration.h"
    #include "Configuration.h"
     
    using namespace std;
     
    int main (int argc, char *argv[])
    {
        // Construction de la classe a tester
        cout << "Construction de l'instance de classe (objet) FichierConfiguration" << endl;
        FichierConfiguration * fichierconfiguration = new FichierConfiguration();
    	Configuration * configuration = new Configuration();
    	fichierconfiguration->lire();
    	fichierconfiguration->ecrire();
    	fichierconfiguration->lire();
        return 0;
    }

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 29
    Par d�faut
    D�sol�, c'est pas tr�s clair

  17. #17
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    Si, c'est parfaitement clair :

    l'objet configuration cr�� dans le main
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    int main (int argc, char *argv[])
    { 
    ....
    Configuration * configuration = new Configuration();
    n'est pas le m�me que celui qui est utilis� dans la classe FichierConfiguration

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    void FichierConfiguration::lire()
    { 
    ...
    this->configuration..
    ..
    }
    Ce dernier n'est pas initialis�, et quand tu appeles une m�thode sur un objet qui n'est pas initialis�, �a plante

    Tu peux changer le titre de ton post, �a n'a rine � voir avec les string

    [/code]

  18. #18
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    62
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 62
    Par d�faut
    As tu r�solu ton probl�me ?
    Je ne suis pas sur � 100% de ce que je t'ai dit.

    Si oui, n'oublie de marquer ton post comme r�solu !

Discussions similaires

  1. R�ponses: 2
    Dernier message: 11/04/2015, 15h56
  2. Probl�me encodage flux xml (CDATA) dans String
    Par Hurricae dans le forum D�veloppement Web en Java
    R�ponses: 2
    Dernier message: 01/08/2011, 06h50
  3. probl�me de copie de userform dans excel
    Par pierrepasquetp dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 21/06/2008, 17h26
  4. VB ExceptionHelper et Recherche d'un string dans string list
    Par chris81 dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 13/06/2008, 10h01
  5. [Tableaux] Supprimer morceaux de string dans string
    Par zulot dans le forum Langage
    R�ponses: 9
    Dernier message: 04/03/2006, 16h35

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