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 :

scanf intelligent?


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut scanf intelligent?
    Salut!

    J'ai fait des tests avec "scanf" et me suis aperçu de choses "étranges":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int t[1]={0};
    printf("%d\n",t[0]);
    scanf("%d",t);
    printf("%d\n",t[0]);
    m'affiche 0 puis la valeur entrée; rien de plus normal: "t" est l'adresse du 1er élément du tableau "t", donc de t[0].

    Mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int t[1]={0};
    printf("%d\n",t[0]);
    scanf("%d",&t);
    printf("%d\n",t[0]);
    me donne le même résultat!

    Je me suis donc dit que l'on ne pouvait pas modifier l'adresse d'une variable précédemment déclarée ce qui semble sensé; et en effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int t[1]={0};
    printf("%d\n",&t);
    scanf("%d",&t);
    printf("%d\n",&t);
    m'affiche 2 fois la même chose, donc on ne peut pas toucher à l'adresse d'une variable, ici en l'occurence le pointeur "t".

    Donc je me dit, "scanf" est "intelligent" et fait comme si j'avais mit: "t" tout court et pas "&t" qui n'a pas de sens car on ne peut modifier l'adresse d'une variable.

    Donc question:
    Est-ce que scanf est réellement "intelligent" et analyse ses arguments en ne faisant que des choses "sensée" pour éviter plantage et comportements indéterminés?

    Merci de vos explications.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    en faisant tu alloues un tableau d'entier (pas un pointeur pur, très important)

    l'adresse du tableau (&t) est la même que l'adresse du premier élément (&t[0]), jusque là c'est logique par compatibilité avec les pointeurs on retrouve t = &t[0]
    donc &t = &t[0] = t

    si t était un int* il y aurait un bug ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    je vais peut etre dire une betise ...

    mais il me semble que sur beaucoup de compilateurs (notement gcc) &t vaut la meme chose que &t[0] (soit t).

    je pense que ca n'as rien a voir avec scanf.

    *edit : faut vraiment que je poste DE SUITE quand je commence a ecrire, et pas faire 12 choses a la fois ... jme fait griller a chaque fois, arf *
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  4. #4
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Euh en fait en prenant du recul je pense que le truc est plutôt au niveau du langage C que de "scanf":
    "&t" signifie l'adresse du pointeur "t", donc "l'adresse de l'adresse de t[0]"; ceci pouvant apparaitre logiquement comme "l'adresse de t[0] tout court" en considérant que l'adresse d'une adresse est elle même.
    En effet à ce niveau on touche aux "limites" du langage:on ne peut toucher à la localisation des variables.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Il y a une explication dans ce topic :
    http://www.developpez.net/forums/sho...hlight=tableau
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  6. #6
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    si t était un int* il y aurait un bug ^^
    Je te rassure, non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a=0;
    int *t=&a;
    scanf("%d",&t);
    printf("%d",a);
    ne plante pas mais m'affiche 0, donc "scanf" n'a pas touché à "a".
    Ca semble donc spécifique aux tableaux.

    En revanche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a=0;
    int *t=&a;
    scanf("%d",&t);
    printf("%d",*t);
    plante à l'exécution.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par seriousme
    Euh en fait en prenant du recul je pense que le truc est plutôt au niveau du langage C que de "scanf":
    "&t" signifie l'adresse du pointeur "t", donc "l'adresse de l'adresse de t[0]"; ceci pouvant apparaitre logiquement comme "l'adresse de t[0] tout court" en considérant que l'adresse d'une adresse est elle même.
    En effet à ce niveau on touche aux "limites" du langage:on ne peut toucher à la localisation des variables.
    Non, l'adresse d'une adresse n'est rien, ça n'existe pas...

    La seule chose qui existe est l'adresse d'une variable (variable, pointeur ou tableau).
    Du fait que dans le cas d'un tableau (allocation statique avec []), il n'y ait pas de pointeur, et que les tableaux aient été faits pour être compatibles avec les pointeurs, l'adresse d'un tableau est égale à l'adresse du premier élément et à l'adresse contenu dans la variable représentant le tableau (comme expliqué plus haut ^^ )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    J'ai fait des tests avec "scanf" et me suis aperçu de choses "étranges":
    Mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int t[1]={0};
    printf("%d\n",t[0]);
    scanf("%d",&t);
    printf("%d\n",t[0]);
    me donne le même résultat!
    Par hasard uniquement... t et &t ne sont pas le même animal. Ils ont la même valeur, mais pas le même type. (gcc previent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    main.c: In function `main_':
    main.c:10: warning: int format, different type arg (arg 2)
    Si t avait été un pointeur, tu aurais été satellisé...
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par seriousme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a=0;
    int *t=&a;
    scanf("%d",&t);
    printf("%d",*t);
    plante à l'exécution.
    C'est bien ce que je disais ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  10. #10
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Ils ont la même valeur, mais pas le même type. (gcc previent)
    J'avoue que ça me dépasse un peu.
    "t" est bien une adresse?
    "&t" aussi non?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    Je te rassure, non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int a=0;
    int *t=&a;
    scanf("%d",&t);
    printf("%d",a);
    ne plante pas mais m'affiche 0, donc "scanf" n'a pas touché à "a".
    Comportement indéfini. Tu écris dans le pointeur... Au fou !
    Fais :
    mais mets ton casque avant...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par seriousme
    "t" est bien une adresse?
    "&t" aussi non?
    oui, mais t est plus qu'une adresse, c'est un tableau... type : int[]
    &t est une adresse de tableau, type : int[]*
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    J'avoue que ça me dépasse un peu.
    "t" est bien une adresse?
    "&t" aussi non?
    Pas la peine de lever les yeux au ciel, c'est très impoli... Si ce que je dis ne t'interesse pas, j'arrête.

    Crocodilex a donné un lien de topic qui a déjà épuisé le sujet.... Tout est là :
    http://www.developpez.net/forums/sho...96&postcount=7

    Pas de Wi-Fi à la maison : CPL

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Swoög
    oui, mais t est plus qu'une adresse, c'est un tableau... type : int[]
    &t est une adresse de tableau, type : int[]*
    Non. Elle est de type int(*)[TAILLE] et la taille doit être définie.
    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 <stdio.h>
     
    int main ()
    {
       short t[3] =
          {
             0
          };
     
       short (*p)[3] = &t;
       printf("%u\n", (unsigned) sizeof t);
       printf("%u\n", (unsigned) sizeof *t);
       printf("%u\n", (unsigned) sizeof p);
       printf("%u\n", (unsigned) sizeof *p);
     
       return 0;
    }
    A méditer...
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Si ce que je dis ne t'interesse pas, j'arrête.
    Au contraire, c'est pour ça que j'essaie de comprendre; mais j'avoue que faire la distinction entre "adresse d'un tableau" et "adresse du 1er élément" en C me dépasse.
    Parce que pour moi "l'interface avec un tableau" en C c'est un pointeur sur le début du tableau c'est à dire son 1er élément.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  16. #16
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    justement, il y a une petite différence entre un int* et un int[]

    un int[] est un VRAI tableau et pas seulement un int* const, on pourrait dire (désolé Emmanuel, c'est pas vraiment correct ce que je vais écrire )

    Quand il est utilisé comme un pointeur (avec *, [], + etc...) il est considéré comme un pointeur sur le premier élément

    mais quand il est utilisé comme une variable (avec & notam) il est considéré comme le premier élément lui-même

    bien sûr il ne change pas de type pour autant ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  17. #17
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    A méditer...
    En effet, j'aurais cru que "sizeof t" et "sizeof p" seraient les mêmes.
    Je suis convaincu, sans vraiment comprendre pourquoi le langage est fait ainsi.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  18. #18
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    En quoi est-ce important en C de faire cette distinction alors que le C est réputé pour son côté "bordélique" quand il s'agit de manipuler la mémoire?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  19. #19
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Non. Elle est de type int(*)[TAILLE] et la taille doit être définie.
    oui, je me suis mal exprimé, mais c'est ce que je voulais dire... désolé
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  20. #20
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par seriousme
    En quoi est-ce important en C de faire cette distinction alors que le C est réputé pour son côté "bordélique" quand il s'agit de manipuler la mémoire?
    Les réputations et autres raclures de bidet ne m'interesse pas. Si tu as des faits précis à exposer, on t'écoute.

    Par contre, faire la distinction entre des addresses de types différents, est essentiel en C, quand on connait l'importance de l'arithmétique des pointeurs dans ce langage...
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Débat sur l'I.A (Intelligence Artificielle)
    Par Anonymous dans le forum Intelligence artificielle
    Réponses: 457
    Dernier message: 05/07/2016, 02h11
  2. [Morpion] Faire jouer l'ordinateur intelligement
    Par Invité dans le forum Intelligence artificielle
    Réponses: 8
    Dernier message: 18/09/2003, 12h05
  3. PB avec scanf
    Par ché dans le forum C
    Réponses: 6
    Dernier message: 13/08/2003, 08h25
  4. [debutant]la fonction scanf
    Par kalaka dans le forum C
    Réponses: 7
    Dernier message: 01/07/2003, 16h15
  5. Réponses: 6
    Dernier message: 10/09/2002, 04h35

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