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 :

Modifier une char* dans une fonction


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut Modifier une char* dans une fonction
    Bonjour,
    voici mon code :
    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
    static bool ExtractVariableName (const char *Source, char* &DestName)
    {
        // The function look if the Source is a variable name and if it is, it extract just the name and stock it in DestName
        // A variable in the document is specify with its name between brackets '[' and ']'
        // If it is effectively a variable it return TRUE else it return FALSE
     
        DestName = NULL;
        if ((Source[0] == '[') and (Source[strlen(Source)-1]==']'))
        {
            const char* i = &Source[1];
            char VariableName[strlen(i)];
            strncpy(VariableName, i,strlen(i)-1);
            VariableName[strlen(i)-1]='\0';
            DestName = VariableName;
            return true;
        }
        return false;
    }
    Au retour de cette fonction, j'ai des soucis : la variable contient bien la bonne valeur, mais cette valeur est modifiée ensuite depuis un autre traitement qui n'a rien à voir.
    Comment écrire correctement cette fonction ?
    Merci d'avance pour vos réponses.
      0  0

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Normal, tu fais "DestName = VariableName" alors que "VariableName" est une variable sur la pile. En fin de fonction, ta pile est détuite donc ta variable "DestName" pointe sur n'importe quoi.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .
      0  0

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 378
    Points
    20 378
    Par défaut
    Ram-0000 a raison tu affectes à DestName une variable locale à la fonction.

    Il faut que tu rappelles strcnpy ou strcpy:
    strcpy(DestName , VariableName)

    En C++ privilégier plutot std::string dans la mesure du possible plutot que char* ça évite les erreurs et c'est plus souple
      0  0

  4. #4
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Merci pour vos réponses aussi rapide.
    Décidemment j'ai du mal avec les char*

    j'ai réecrit ma fonction comme ceci :
    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
    static bool ExtractVariableName (const char *Source, char* DestName)
    {
        // The function look if the Source is a variable name and if it is, it extract just the name wich is stocked in DestName
        // A variable in the document is specify with its name between brackets '[' and ']'
        // If it is effectively a variable it return TRUE else it return FALSE
     
        DestName = "";
        if ((Source[0] == '[') and (Source[strlen(Source)-1]==']'))
        {
            const char* i = &Source[1];
            strncpy(DestName, i,strlen(Source)-2);
            return true;
        }
        return false;
    }
    Ca plante au niveau de strncpy. Je pense que c'est parceque la taille de DestName = 0. Je pensais que strncpy se chargait du redimensionnement de la variable destination mais ce n'est apparemment pas le cas.
    Comment faire ce redimensionnement ?
    Merci.

    PS : je suis obligé d'utiliser les char* dans ce cas. Sinon, j'utilise au maximum les string et effectivement, j'ai beaucoup moins de soucis.
      0  0

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    On est dans un forum C++ alors fait un truc genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static bool ExtractVariableName (const std::string & Source, std::string & DestName)
    tu auras moins de difficultés
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .
      0  0

  6. #6
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Effectivement, je vais poster dans le forum C.
    Merci encore pour vos réponses.
      0  0

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Post verrouillé, la suite ici : Modif d'une variable char* dans une fonction dans le fourm C.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .
      0  0

Discussion fermée
Cette discussion est résolue.

Discussions similaires

  1. Modifier le style d'une page dans une frame via une autre frame
    Par Menontona dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2011, 18h54
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  3. modifier un élément d'une form dans une méthode d'une autre form
    Par baldebaran dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/08/2009, 13h59
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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