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

Langage C++ Discussion :

const C array -> C array


Sujet :

Langage C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut const C array -> C array
    Bonjour,

    J'utilise une fonction, issue d'une biblitothèque, qui prend comme argument un pointeur sur un tableau C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void laFonction(char* arg[])
    {
    }
    La valeur avec laquelle je veux appeler la fonction est un tableau de chaînes de caractères.

    Dès, lors deux manières de l'initialiser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char* mesValeurs[] = {"a","b","c"};
    char* mesValeurs[] = {"a","b","c"};
    Si j'utilise la première, ça râle au niveau de la fonction.
    Si j'utilise la seconde, gcc m'envoie des avertissements du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    Il faudrait donc que je déclare en const, et que fasse un const_cast dans l'appel de la fonction.
    Mais je n'arrive pas à trouver la syntaxe dans le cas d'un tableau...

    PS : je sais que la fonction ne modifie pas le tableau ; mais je ne peux pas modifier sa signature (biblitothèque externe)

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    N'oublie pas qu'un tableau en entrée de fonction n'est rien de plus qu'un pointeur. Ce code minimal marche sur mon C::B:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    void laFonction(char* arg[])
    {
    }
     
    const char* mesValeurs[] = {"a","b","c"};
     
    int main() {
    	laFonction(const_cast< char ** >(mesValeurs));
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu as un const char* arg[] et tu veux un char* arg[], donc il suffit de const_cast<char*[]> ou const_cast<char**>.
    En fait faut juste caster vers le type que tu veux.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Par contre, retirer le const d'une variable, c'est ouvrir la porte à pas mal de problème.
    Sais-tu si la fonction ne modifie pas son argument?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par leternel Voir le message
    Par contre, retirer le const d'une variable, c'est ouvrir la porte à pas mal de problème.
    Sais-tu si la fonction ne modifie pas son argument?
    PS : je sais que la fonction ne modifie pas le tableau ; mais je ne peux pas modifier sa signature (biblitothèque externe)
    C'est ça le problème avec les bibliothèques qui déclarent mal leur interface...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Je n'avais pas vu cette remarque.
    L'autre solution possible, c'est de copier tout, quand on ne connait pas la fonction.

    En général, une bibliothèque qui fait mal son travail, j'essaie de l'éviter, ou je crée des fonctions intermédiaires pour "nettoyer la signature"
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Merci à tous pour vos réponses.

    Comme vous le voyez, je n'interviens plus guère dans ce forum, car cela fait presque 1 an que je ne fais plus de C++...
    J'ai perdu mes réflexes, et j'ai honte en ayant lu la réponse de Médinoc.

    Va falloir que je démissionne, je crois !

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Mais non, ca va revenir rapidement.
    C'est comme le vélo, ca ne s'oublie pas
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Array dans un Array.. Dans un Array
    Par blinkman04 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2014, 14h36
  2. Réponses: 7
    Dernier message: 19/09/2008, 11h27
  3. Réponses: 7
    Dernier message: 12/03/2007, 09h06
  4. Différence entre ARRAY et PACKED ARRAY
    Par homeostasie dans le forum Langage
    Réponses: 5
    Dernier message: 16/01/2007, 22h02
  5. [Tableaux] Affichage d'array et sous-array
    Par zebulon90 dans le forum Langage
    Réponses: 6
    Dernier message: 06/10/2006, 09h56

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