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 :

[Debutant] passage de variables


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 87
    Par défaut [Debutant] passage de variables
    Bonjour,
    je tiens a prevenir que cela fait 2 ans que je n'ai plus fait de C++ et a l'epoque j'avais un niveau débutant !
    Donc ma question :
    pour un projet personnel j'essaye de faire un mini client mysql en C++ ds lequel on saisira des requetes a executer sur une bdd préalablement définie, hors j'ai beaucoup de mal a faire passer un CHAR saisie a la mano grace a un CIN ds la fonction : (mysql_query(sock,rrequete)).

    si je fait un char * rrequete = "select * from user;" la requete passe correctement.
    par contre si je fait un cin >> rrequete ; => le programme compile mais plante a la saisie.

    Actuellement j'ai ecrit ce code afin de saisir la requete et l'envoyer mais j'obtiens a chaque fois le message d'erreur ci dessous :

    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
     
    string requete ;                   //Creation d'un string afin de permettre une saisie plus facile
    cout << "requete ? " ;
    cin >> requete ;
    size_t requetesize = requete.size() + 1;   //on regarde la taille de la chaine
    char * rrequete = new char[ requetesize ];  //on crée un char a la taille+1 pour caract de fin de chaine
    strncpy( rrequete, requete.c_str(), requetesize );   // on copie la string ds le char                         
    delete &requete;           // on libere de la mémoire       
    cout << requete ;          // on controle ce que l'on a rentré....rien ne s'afffiche ...
     
    //execution de la requete
    if (mysql_query(sock,rrequete)) cout <<"echec de la requete, motif : \n" << mysql_error(sock) << "\n";
        else
        {
        cout << "requete faite !";
        }
    message renvoyé par le programme :

    Le serveur est en ligne
    Initialisation de la connexion Ok !
    connection ok, sur la bdd : test
    requete ? select * from user;
    echec de la requete, motif :
    You have an error in your SQL syntax; check the manual that corresponds to your
    MySQL server version for the right syntax to use near '' at line 1
    Press any key to continue . . .

    la mysql_query(sock,rrequete) ne prendrait elle pas par hasard unqiuement la premiere case de ma chaine de caractere? rrequete[0] ?
    j'ai l'impression que ma variable rrequette renvoie '' et d'ailleurs on voit bien ds le cout rrequete rien ne s'affiche a l'ecran

  2. #2
    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
    Il ne faut faire delete que sur une variable allouée avec new. C'est ce qui doit provoquer ton crash.

    Ensuite pas besoin de recopier ta chaîne dans un tableau de caractères, ça ne sert strictement à rien. La fonction c_str() de std::string est tout ce dont tu as besoin.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 87
    Par défaut
    Merci de ta réponse j'ai donc fait les modifications en conséquences :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    string requete ;
    cout << "requete ? " ;
    cin >> requete ;                                   
    cout << requete.c_str() <<"\n";   
    if (mysql_query(sock,requete.c_str())) cout <<"echec de la requete, motif : \n" << mysql_error(sock) << "\n";
        else 
        {
        cout << "requete faite !";
        }
    Plus de plantage du programme, il y a une amélioration ds le passage de la chaine de caractere a la fonction mysql au lieu d'avoir une case j'ai un mot maintenant ! mais il me manque le reste

    Le serveur est en ligne
    Initialisation de la connexion Ok !
    connection ok, sur la bdd : test
    requete ? select * from user;
    selectechec de la requete, motif :
    You have an error in your SQL syntax; check the manual that corresponds to your
    MySQL server version for the right syntax to use near '' at line 1
    Press any key to continue . . .

  4. #4
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 87
    Par défaut
    Oups le faq

    Merci de votre aide !

    Code final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    string requete;                 
    cout << "requete ? " ;
    getline( cin, requete ); 
    cout << requete.c_str() ;   
    if (mysql_query(sock,requete.c_str())) cout <<"echec de la requete, motif : \n" << mysql_error(sock) << "\n";
        else 
        {
        cout << "requete faite !";
        }
    resultat :

    Le serveur est en ligne
    Initialisation de la connexion Ok !
    connection ok, sur la bdd : test
    requete ? select * from user;
    select * from user;requete faite !Press any key to continue . . .

    c'est good !

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

Discussions similaires

  1. [Débutant] Passage de variables
    Par shean10000 dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/07/2007, 10h19
  2. Réponses: 7
    Dernier message: 26/07/2006, 14h48
  3. [VB.Net][debutant]passage de variable entre windows form
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2006, 14h18
  4. [Debutant]Passage de variable a une fonction
    Par picomz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2006, 19h56
  5. [debutant]passager une variable d'une page a une autre
    Par Eisy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2006, 11h18

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