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 :

Conversion string=>char c/c++ pour utiliser dans fonction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Par défaut Conversion string=>char c/c++ pour utiliser dans fonction
    Bonjour bonjour à tous....

    J'ai cherché pendant pas mal de temps alors je viens ici par dépit... (ewi ça me frustre de pas trouver comme ça :B)
    Bref donc en fait je voudrais exécuter mon programme avec un argument et récupérer cet argument pour l'utiliser dans une fonction

    au début j'avais fait ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main ( int argc , char * argv[] )
    {
       string monArgument;
       FILE *monFichier = fopen(monArgument, "w"); 
     
    }
    mais ça j'obtiens une erreur de conversion je ne sais plus laquelle

    Ensuite j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main ( int argc , char * argv[] )
    {
        string str = argv[1];
        const char *ptr = str.c_str() ;
        printf(ptr);
    }
    je n'ai plus d'erreur mais rien ne s'affiche dans mon printf(ptr); donc inutilisable dans ma fonction

    Quelqu'un saurait m'aiguiller gentiment ? :B

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Tu ne vérifie pas que tu ais le bon nombre d'arguments.

    Pour l'affichage en C++ tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std:cout << ptr << std::endl;
    Essaye d'afficher argv[1] pour être sûr que ton problème ne vienne pas tout simplement du fait que tu ne passes pas d'arguments en paramètre de ton exécutable.

    EDIT : chez moi ton code marche, mais tu devrais rajouter un retour à la ligne après ton affichage.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Par défaut
    Hmmph bonjour Neckara et merci de m'avoir répondu : )

    M'en fait c'était pour un autre problème car ceci était un exemple pour pouvoir chercher dans mon code pourquoi ça marche pas. J'ai peut être avancé depuis hier mais je suis toujours bloqué X_X

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(argv != NULL)
    {
         string argument;
         argument = argv[1];
         curl_easy_setopt(maSession, CURLOPT_URL, argument.c_str());
    }
    Et la j'obtiens une erreur console : segmentation fault
    J'ai compris que c'était une erreur de pointeur et donc une erreur de construction de code
    Si tu sais m'orienter cela me permettrait beaucoup d'avance :p

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 118
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Votre utilisation de argv n'est pas efficace.
    argv n'est jamais nul en C/C++ car il contient toujours le nom du programme dans argv[0].
    Il faut utiliser argc, pour connnaître le nombre d'arguments (qui est au minimum de 1, comme je l'ai dit).
    Ici, vous devez vérifier s'il y a bien un argument en plus du nom du programme, soit, si argc == 2.
    Pour cette raison :
    ./programme argument
    argc=2
    argv[0] = "./programme" argv[1] = "argument"
    Une fois votre vérification de argc faite, vous pouvez utiliser tranquillement argv[], sans avoir de crainte que cela plante.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 13
    Par défaut
    Ah oui en effet, c'est ce que j'avais avant... je ne sais pas pourquoi j'ai changé pour ça. Merci : )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(argc > 1)
    {
            string argument;
            argument = argv[1];
            curl_easy_setopt(maSession, CURLOPT_URL, argument.c_str());
    }
    Bon petit à petit j'avance. Mais cela ne marche toujours pas. Cela devrait normalement fonctionner ou alors ai-je fait une erreur à la fin de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_easy_setopt(maSession, CURLOPT_URL, argument.c_str());
    ?

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Quel est l'erreur que tu obtiens?

    Note: tu peux écrire directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string argument = argv[1];
    Dans les faits ça ne change rien, mais ça te fais une ligne de code en moins, c'est toujours ça de pris.

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

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    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 290
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    argv ne peut pas être null, car il contient au moins un élément: le path de l'exécutable. Donc ton test if(argv != NULL) est inutile.
    En revanche, il faut que tu vérifie que le nombre d'argument est correct, parce que lorsque tu essaie d'accéder à argv[1], si argv n'a qu'un seul élément, alors ça va effectivement générer une segfault.

    edit: doublon avec LittleWhite (nous disons la même chose)

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

Discussions similaires

  1. conversion string en char *
    Par nana38000 dans le forum Débuter
    Réponses: 7
    Dernier message: 02/04/2010, 14h49
  2. Conversion string to char *
    Par uriotcea dans le forum Débuter
    Réponses: 2
    Dernier message: 22/12/2009, 12h51
  3. conversion String to char*
    Par warning dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/12/2007, 11h29
  4. Conversion String vers char
    Par benwit dans le forum Langage
    Réponses: 27
    Dernier message: 30/03/2007, 14h01
  5. conversion string to char* et erreur ATL CString
    Par Aliveli dans le forum Visual C++
    Réponses: 5
    Dernier message: 28/11/2006, 22h55

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