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++

  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 : 35
    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 ...) ?

  7. #7
    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
    Merci burndev mais le résultat est le même, dans visual C++ tous les "string" sont soulignés en rouge, il doit y avoir un problème de librairie.

    En attendant de dévéroler la version "string" j'ai bidouillé une version qui fonctionne grâce à votre aide :
    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
    27
     
    #include <stdlib.h>
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
    void left(char *mot, char *tmp, int nombre);
     
    int main()
    {
    char mot1[9];
    char tmp[6];
     
    cin >> mot1;
    left(mot1,tmp, 4);
     
    cout<< tmp;
    system("PAUSE");
    return (0);
    }
     
     
    void left(char *mot, char*tmp,int nombre)
    {
    strncpy(tmp,mot,nombre);
    tmp[nombre]='\n';       
    }
    Bon, c'est nul, j'ai ré-inventé la fonction strncpy en utilisant ...strncpy ! Pas grave, ça me fait travailler la syntaxe et les pointeurs

  8. #8
    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
    #include <string> devrait suffire...
    sans oublier using namespace std;
    Par contre, je suis un peu douteux du tmp[nombre]='\n';

  9. #9
    Membre très actif
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Par défaut
    bonsoir,
    sous code::blocks ceci fonctionne

    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
     
    #include <iostream>
    #include <string>
     
     
    using namespace std;
    string left(string, size_t );
    int main()
    {
      string mot1;
      string debut;
      cin >> mot1;
      debut = left(mot1, 4);
      cout<<debut;
      return (0);
    }
    string left(string mot, size_t n)
    {
      if(n<mot.size())
        return string (mot.begin(),mot.begin()+n);
      else
        return mot;
    }

  10. #10
    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 Taiby Voir le message
    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é
    Citation Envoyé par NoIdea Voir le message
    sans oublier using namespace std;
    Citation Envoyé par burndev Voir le message
    bonsoir,
    sous code::blocks ceci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //[...]
    using namespace std;
    //[...]
    Tous les membres de la STL (Standard Tamplate Library) sont sous l'espace de nommage std (standard template directory) ce qui concrètement veut dire que tous ses membres (dont les string ) on pour préfixe "std::". On peut ignorer ce préfixe avec using namesapce std. Toutefois, il ne faut JAMAIS mettre de using namespace dans un header (ou éventuellement dans un bloc et encore, on préfere reprendre le namespace en général.). C'est pouquoi on conseille plutot d'utiliser le préfixe à la place. En plus, ça permet d'éviter d'oublier de mettre le using comme je l'ai fais.

    Le code corrigé est le suivant:
    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
    #include <iostream>
    #include <string>
    int main(int argc, char *argv[])
    {
      std::string mot1;
      std::string debut;
      cin >> mot1;
      debut = left(mot1, 4);
      cout<<debut;
      return (0);
    }
    std::string left(const std::string &mot, size_t n)
    {
      if(n<mot.size())
        return std::string (mot.begin(),mot.begin()+n);         
      else
        return mot;
    }
    Bonne chance

  11. #11
    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
    Ok, j'ai bien compris l'usage du "using namespace std;" ou "std::", merci à tous. Cela fonctionne impec maintenant, je vais pouvoir intégrer cela au code que j'avais déjà commencé.

    Tout de même, je me demande si le C++ m'est bien indiqué car j'ai peur de mélanger le peu de C que je connais et le VBA au C++. Mon besoin est relativement simple, le C pourrait convenir, mais je voudrais utiliser les fenêtres windows pour les messages, les ouvertures de fichiers ... et ne plus passer par les fenêtres DOS d'aspect dépassé.
    J'ai aperçu un post sur ce débat C vs C++, je vais aller lire cela.

    Merci encore pour vos conseils.

  12. #12
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si tu trouves que l'utilisation de string est plus simple que celle des pointeurs, ce qui a l'air d'être la cas, alors dis toi que justement c'est ce qu'apporte le C++ par rapport au C.

    De même, pour mettre en place des fenêtres, il est possible de le faire en C comme en C++, mais il existe en C++ des bibliothèques qui facilitent énormément ce travail. Par exemple, regarde du côté de Qt.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  13. #13
    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
    D'un autre coté, je ne sais pas si le C++ est le plus indiqué pour se mettre à l'interface graphique: ce que je veux dire, c'est que malgré l'existence de bibliothèques comme Qt qui simplifient énormément la tâche, il est encore nécessaire d'avoir un certain degré de compréhension du C++ pour pouvoir les manipuler. Il est souvent plus simple de faire le travail IHM dans un autre langage que le C++ ... et d'appeler des librairies C++ compilées pour les performances.

  14. #14
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Quand on conseille à longueur d'année de préférer la classe string, disponible dans l'espace de noms std par simple inclusion du fichier d'en-tête <string> aux chaines de caractère "C style", ce n'est pas vraiment pour rien

    En effet, outre toutes les solutions aux problèmes propres aux chaines de caractères C style que fournit cette classe, on peut épingler le fait qu'elle présente une quantité non négligeables (d'aucuns estiment qu'elle en présente d'ailleurs trop ) de fonctions sympa.

    Parmi celles-ci, il existe la fonction membre substr, que l'on peut utiliser en donnant un ou deux entiers:
    machaine.substr(position); va renvoyer la sous chaine qui commence à position de machaine et qui... prend tous les caractères qui se trouvent après cette position.

    machaine.substr(pos1, nbr); va renvoyer la sous chaine qui commence à position de machaine et qui... prend maximum nbr caractères qui se trouvent après cette position.

    Tu pourrais donc te simplifier la vie avec un code proche de
    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
    #include <string> // pour disposer de std::string
    using namespace std; //!!! jamais dans un fichier d'en-tête
    int main()
    {
        string first; // std::string first si tu ne met pas la directive using
        string sub; // idem
        int nbr;
        cout<<"introduisez la chaine d'origine "; // std::cout<< si tu ne met pas la 
                                                  // directive using
        cin>> first; // toujours pareil pour la directive using
        cout<<"introduisez le nombre de caracteres ";
        cin>> nbr;
        sub = first.substr(0, nbr);
        cout<<" les "<<nbr<<" premiers caracteres de la chaine sont "
            <<sub;
        return 0;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  15. #15
    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
    Merci Koala01, c'est exactement ce que je voulais faire et cela démontre bien la difficulté de savoir ce qui existe et ce qui est à créer (vrai quelque soit le langage). Il faudrait un énorme lexique de toutes les fonctions qui existent, par thème et par mot clé, mais peut-être que cela aussi existe déjà ...

    JolyLoic, en parlant de la bibliothèque Qt tu as éveillé ma curiosité et je suis parti à la recherche d'informations. Du coup j'ai passé la journée à lire des cours de C++ (je comprends maintenant la signification méritée des deux ++ ) et c'est décidée, je laisse tomber le C au profit du C++ sans regret (enfin c'est mon discours d'aujourd'hui).

  16. #16
    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 Taiby Voir le message
    Merci Koala01, c'est exactement ce que je voulais faire et cela démontre bien la difficulté de savoir ce qui existe et ce qui est à créer (vrai quelque soit le langage). Il faudrait un énorme lexique de toutes les fonctions qui existent, par thème et par mot clé, mais peut-être que cela aussi existe déjà ...
    je confirme il suffit de taper
    Reference C++ dans ton moteur de recherche préféré et tu tombera sur une plétore d'outils dans ce genre. le problème est que si tu cherche la fonction left, tu ne la trouvera pas. de même que si tu cherche l'opérateur &en C++ pour les chaines de caractère tu ne trouveras pas non plus (je parle de l'opérateur de concaténation Vb). Il faut chercher la notion (en l'ocurrence "extraction de chaine de caractère" et "concaténation de chaine de caractère) et non l'équivalence car la plupart du temps, elle n'existe pas. D'un autre coté, il faut avouer qu'il regne une certaine confusion sur le net (du moins lorsuque l'on fait une recherche sur le net) entre les fonctions C et C++ et on trouvera souvent le premier à la place du second .

    Bonne chance pour la suite

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par koala01 Voir le message
    outre toutes les solutions aux problèmes propres aux chaines de caractères C style que fournit cette classe, on peut épingler le fait qu'elle présente une quantité non négligeables (d'aucuns estiment qu'elle en présente d'ailleurs trop ) de fonctions sympa.
    Voila qui m'étonne j'ai toujours trouvé que la classe string était franchement radine en fonctions utiles comparé à d'autre librairie (genre QString).

  18. #18
    Invité
    Invité(e)
    Par défaut
    A propos des "fonction utiles de la classe string", comment fabriquer une chaine qui représente la valeur d'un nombre décimal à afficher?

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    A propos des "fonction utiles de la classe string", comment fabriquer une chaine qui représente la valeur d'un nombre décimal à afficher?
    justement l'une des fonctionnalités qui manque vraiment à la classe string. Il faut utiliser un textstream si je me souvient bien.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour Atttchoum,
    Je vais vous confier un secret. Il y a 10 ans à peu près, quand j'ai acheté mon nouveau compilateur, j'ai regardé les possibilités de la classe string par rapport à ce dont je disposais. En particulier les facilités d'impression et le remplacement éventuel de ma fonction ftoa(). J'ai rien trouvé de particulièrement folichon. Alors, j'ai pris les possibilités qu'offrait le C++, et j'ai laissé les containers où ils étaient. En d'autres termes, j'ai continué à faire du développement, pour la programmation, ma machine et moi, on se comprend.
    Possible que ce post me vaudra un nouvel avertissement, mais tant pis

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