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 :

perdu dans les pointeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut perdu dans les pointeurs
    Bonjour,
    je suis totalement novice en C++ (je viens du VBA) et je dois reprendre tout à zéro pas facile sans mélanger les deux langages...

    Bref puisque apparemment la fonction left n'existe pas en C, je voudrais la créer sous la forme d'une routine à laquelle je passe l'adresse d'une chaîne de caractères, un nombre de caractère et qui me retourne le nombre de caractère correspondant à partir de la gauche. J'ai donc écrit un petit bout de programme mais dans DEV-C++ la compilation se traduit par un floppée d'erreurs.
    Je n'ai pas honte et je vous livre la chose brute de décoffrage.

    Merci de me conseiller et de me mettre le pied à l'étrier

    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
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
    char *left(char *mot, int nombre);
     
    int main(int argc, char *argv[])
    {
    char mot1[9];
    char tmp[6];
    char debut[5];
     
    cin >> mot1;
    debut = left(mot1, 4);
    return (0);
    }
     
     
    char *left(char *mot, int nombre)
    {
    char tmp[128];
    strncpy(*tmp,*mot,nombre);
    return(*tmp);         
    }

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Tout d'abord, ton code ressemble plus à du C qu'à du c++ (mis à part pour cin).
    Je t'invite donc à reposter dans le forum C.

    strncpy prend en parametre char*, char*, int

    Or, mot est un char*, donc, *mot est un char.
    tmp est un tableau (on va dire que l'on peut le considérer comme un char*).
    Donc, *tmp est un char.
    Il y a donc un problème de type.
    Je te conseille de revoir les pointeurs ainsi que le header string.h.
    De plus, es-tu sur que strncpy est bien dans le header iostream ou cstdlib ?
    Il me semble que ce serait plus dans string.h
    Il reste de nombreuse erreurs ensuite dans ton code, mais à l'aide des erreurs du compilateur et de ce que je t'ai indiquer tu devrais t'en sortir.
    De plus, ton code est assez "moche" de par l'utilisation de tableaux au lieu de pointeur de taille dynamique et etc...

    Si tu veux faire du c++, je te conseille d'utiliser l'objet string déjà fourni qui possède des méthodes faciles à utiliser.


    Bonne chance.

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Le code n'est pas si mal

    le problème vient de l'include: il faut inclure <stdlib.h>et <string.h> et non cstdlib qui n'existe pas (il me semble ?).

    il faut aussi retirer les déréférencements dans left (*).

    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
     
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
     
    using namespace std;
    char *left(char *mot, int nombre);
     
    int main(int argc, char *argv[])
    {
    char mot1[9];
    char tmp[6];
    char debut[5];
     
    cin >> mot1;
    debut = left(mot1, 4);
    return (0);
    }
     
     
    char *left(char *mot, int nombre)
    {
    char tmp[128];
    strncpy(tmp,mot,nombre);
    return (tmp);         
    }[
    toutefois, il y a une manière beaucoup plus élégante de le faire à l'aide d'un string de la stl (bibliothèque string) :
    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
     
    #include <iostream>
    #include <string>
    int main(int argc, char *argv[])
    {
      string mot1;
      string debut;
      cin >> mot1;
      debut = left(mot1, 4);
      cout<<debut;
      return (0);
    }
    string left(const string &mot, size_t n)
    {
      if(n<mot.size())
        return string (mot.begin(),mot.begin()+n);         
      else
        return mot;
    }
    bonne chance pour la suite

  4. #4
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    le problème vient de l'include: il faut inclure <stdlib.h>et <string.h> et non cstdlib qui n'existe pas (il me semble ?).
    Non au contraire, il faisait les choses très bien. En C++ les includes en .h sont deprecated, remplacer par des includes sans .h et qui commence par un c.

    Sa mis à part : +1 pour le reste, tu fais du C++ alors profite du RAII and co : string et toute la STL

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    Citation Envoyé par Goten Voir le message
    Non au contraire, il faisait les choses très bien. En C++ les includes en .h sont deprecated, remplacer par des includes sans .h et qui commence par un c.
    J'ignorais cela. Même mon compilo qui est pourtant en strict iso ne me le dit pas. Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut
    Citation Envoyé par méphistopheles Voir le message
    toutefois, il y a une manière beaucoup plus élégante de le faire à l'aide d'un string de la stl (bibliothèque string) :
    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
     
    #include <iostream>
    #include <string>
    int main(int argc, char *argv[])
    {
      string mot1;
      string debut;
      cin >> mot1;
      debut = left(mot1, 4);
      cout<<debut;
      return (0);
    }
    string left(const string &mot, size_t n)
    {
      if(n<mot.size())
        return string (mot.begin(),mot.begin()+n);         
      else
        return mot;
    }
    bonne chance pour la suite
    Merci à vous pour les conseils, utiliser "string" me semble en effet plus cohérent de ce que je veux faire. Cependant lorsque je copie le code que tu m'as fourni (dans Visual C++ ou DEV-C++) j'ai des erreurs du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\documents and settings\tous\mes documents\visual studio 2010\projects\left2\left2\main.cpp(10): error C2065: 'string'*: identificateur non déclaré
    Ai-je oublié quelque chose (déclaration de librairie ...) ?

Discussions similaires

  1. Perdu dans les pointeurs
    Par sinfoni dans le forum Débuter
    Réponses: 2
    Dernier message: 26/05/2010, 11h37
  2. Perdu dans les joins
    Par kabkab dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/03/2007, 23h16
  3. perdu dans les fonctions en c++ builder
    Par davidc dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2007, 16h22
  4. [Débutant] Perdu dans les streams
    Par Le Furet dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 04/01/2007, 10h58
  5. Perdue dans les Response.Write...
    Par Tapioca dans le forum ASP
    Réponses: 4
    Dernier message: 11/07/2004, 11h54

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