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 :

Passer d'un int à un tableau de char


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut Passer d'un int à un tableau de char
    Bonsoir,

    Je cherche depuis quelque heures à transformer un int en tableau de char.
    Une petite représentation de la chose ?

    Mon int : 30
    Mon tableau de char : {'3','0'}

    Si vous vous demandez pourquoi je souhaite faire cela, et bien je travaille sur une communication entre deux programmes en utilisant les sockets et notamment grâce aux fonctions send() et recv() qui travaillent avec des chaînes de caractère en entrée.
    D'un côté j'envoie un int et j'aimerais pouvoir le récupérer de l'autre mais tout les exemples de code trouvés ne répondent pas à mes attentes.
    L'idée est donc de créer ce tableau de caractère, pour ensuite appliquer la fonction sscanf() lors de la réception comme expliqué ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char myarray[5] = {'-', '1', '2', '3', '\0'};
    int i;
    sscanf(myarray, "%d", &i);
    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,

    Regarde du côté de sprintf ou mieux snprintf ou éventuellement sous GNU/Linux asprintf.

    exemple snprintf
    exemple asprintf

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut
    J'ai déjà essayé d'utiliser sprintf mais sans succès !
    Je vais donc jeter un coup d'oeil sur l'autre fonction que tu me conseilles, je te tiens au courant !

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Comment as-tu essayé snprintf?
    Parce que c'est la solution habituelle.
    Il faut par contre prendre le soin de disposer d'un bloc mémoire à remplir (un char[] ou un char* avec un malloc déjà fait).
    snprintf (comme sprintf) ne crée pas le buffer de sortie.

    Plus intéressant:
    si tu donnes 0 comme taille à snprintf, le buffer ne sera pas écrit, mais la taille sera calculée et retournée.
    Cela signifie que tu peux utiliser la fonction pour savoir la taille à allouer (malloc).

    int snprintf( char *restrict buffer, int bufsz, const char *restrict format, ... );

    Writes the results to a character string buffer.
    At most bufsz - 1 characters are written. The resulting character string will be terminated with a null character, unless bufsz is zero.
    If bufsz is zero, nothing is written and buffer may be a null pointer, however the return value (number of bytes that would be written) is still calculated and returned.

  5. #5
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Si le but est d'envoyer un int via un socket il est plus efficient de le caster en char au moment de l'envoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(monsocket, (char)&monInt,sizeof(int),0);
    Enfin je pense...

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je ne sais pas si un socket n'attend pas une chaine (avec le '\0')
    Si c'est le cas, c'est une grave faille de sécurité que de procéder comme tu le propose.
    Car les octets suivants de la ram seront envoyé sur une socket.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    send() prend un void* et une longueur.

    Ils se sont trompés dans le type du paramètre chez Microsoft (ayant incompétemment mis un char* à la place sans aucune raison), mais même dans cette version, send() ne tente jamais de faire un strlen().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est bon à savoir.
    Et donc le cast fonctionnerait. (beurk)

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut
    Citation Envoyé par leternel Voir le message
    Comment as-tu essayé snprintf?
    Alors je n'ai justement pas essayé snprintf. J'ai essayé sprintf et je vais m'empresser de tester avec snprintf.
    Sinon, voici le code avec sprintf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            bzero(&message, sizeof(message));
    	int monInt = moyenne(temperature);
    	sprintf(message, "%c", monInt);
    	if(send(ctrl_sock, message, strlen(message), 0) < 0)
    	{
    		perror("Error on writting the response to the prelever client");
    		exit(1);
    	}else{
    	puts("Temperatures sended to controller");
            }
    Et le code lors de la réception du message dans l'autre programme :
    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
     
    	n = recv(sock, message, 2000, 0);
            int temps = 0;
    	sprintf(message, "%d", &temps);
    	puts(message);
    	if(temps == 10){
                    // Je m'arrange pour que le nomnre envoyé soit 10 afin de tester si on reçoit bien un int
    		puts("Correctly received int");
    	}
     
    	if(n < 0)
    	{
    		perror("Unable to read the message socket");
    		exit(1);
    	}
    Citation Envoyé par SkyZoThreaD Voir le message
    Si le but est d'envoyer un int via un socket il est plus efficient de le caster en char au moment de l'envoi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(monsocket, (char)&monInt,sizeof(int),0);
    Enfin je pense...
    Je vais essayer alors ! Merci !

    En tout les cas, merci de m'aider, c'est sympa!

    Edit :
    Je viens d'essayer avec le cast et le compilateur me crache dessus
    A priori, la taille passée en paramètre ne serait pas correcte!
    src/prelever_server.c: In function ‘communicationClient’:
    src/prelever_server.c:61:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    if(send(ctrl_sock, (char)&monInt, sizeof(monInt), 0) < 0)
    ^
    src/prelever_server.c:61:7: warning: passing argument 2 of ‘send’ makes pointer from integer without a cast [enabled by default]
    if(send(ctrl_sock, (char)&monInt, sizeof(monInt), 0) < 0)
    ^
    In file included from src/prelever_server.c:3:0:
    /usr/include/x86_64-linux-gnu/sys/socket.h:149:16: note: expected ‘const void *’ but argument is of type ‘char’
    extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
    Edit2 :
    Je viens d'essayer avec snprintf et aucun résultat. Voici mon code :
    (resMoyenne est un tableau de char[2000])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bzero(&message, sizeof(message));
    		int monInt = moyenne(temperature);
    		snprintf(resMoyenne, 2000, "%d", monInt);
    		if(send(ctrl_sock, resMoyenne, strlen(resMoyenne), 0) < 0)
    		{
    			perror("Error on writting the response to the prelever client");
    			exit(1);
    		}else{
    			puts("Temperatures sended to controller");
    		}
    Au niveau de la réception, j'ai écris cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    n = recv(sock, message, 2000, 0);
            int temps = 0;
    	temps = atoi(message);
    	if(temps == 10){
    		puts("Correctly received int");
    	}
     
    	if(n < 0)
    	{
    		perror("Unable to read the message socket");
    		exit(1);
    	}

  10. #10
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Je ne sais pas si un socket n'attend pas une chaine (avec le '\0')
    Si c'est le cas, c'est une grave faille de sécurité que de procéder comme tu le propose.
    Car les octets suivants de la ram seront envoyé sur une socket.
    Non. Le sizeof(int) limite l'envoi à la taille de l'int. Aucune raison qu'il envoi plus que ça.

    Ils se sont trompés dans le type du paramètre chez Microsoft (ayant incompétemment mis un char* à la place sans aucune raison), mais même dans cette version, send() ne tente jamais de faire un strlen().
    Merci pour l'info. Sacré Crosoft... Tu as bien raison: pas de strlen(). Ça générerait la faille dont parlait l'eternel

    edit: pardon j'ai fait une erreur le cast doit se faire en char* pas en char
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(monsocket, (char*)&monint, sizeof(int), 0);
    edit2: du coup ne suivons pas les bétises de crosoft
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    send(monsocket, (void*)&monint, sizeof(int), 0);

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant - Développeur Web/Logiciel
    Inscrit en
    Mai 2012
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant - Développeur Web/Logiciel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 67
    Par défaut
    R-bonsoir,

    Je viens d'essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		int monInt = moyenne(temperature);
    		if(send(ctrl_sock, (void*)&monInt, sizeof(int), 0) < 0)
    		{
    			perror("Error on writting the response to the prelever client");
    			exit(1);
    		}else{
    	         	puts("Temperatures sended to controller");
    		}
    Et j'obtiens ceci : � (un point interrogation et deux carrés indiquant des caractères non représentables donc bon )
    Enfin, je m'attend un peu à ça dans le sens ou je fais un puts du message envoyé, qui ne doit pas être très fonctionnel.
    Cependant, je ne passe toujours pas dans ma condition ou le résultat est égale à 10..
    Voici le code qui récupère la donnée envoyée, peut-être que je m'y prend mal...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            int temps = 0;
    	char message[2000];
     
    	n = recv(sock, message, 2000, 0);
    	puts(message); // Les caractères bizarres viennent d'ici !
    	temps = atoi(message); // On convertis notre chaine de caractère, censée être un nombre, en un int pour pouvoir faire la comparaison
    	if(temps == 10){
    		puts("Correctly received int");
    	}

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Le serveur et le client doivent parler la même langue. Si le serveur envoie les sizeof(int) octets d'un int, le client doit s'attendre à recevoir la même chose:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            int temps = 0;
     
    	n = recv(sock, (void*)&temps, sizeof(int), 0);
    	if(temps == 10){
    		puts("Correctly received int");
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Tu ne peux pas utiliser puts avec ce que tu as reçu de recv.
    Du moins sans préparation.

    En effet, ce n'est pas une chaine de caractère, mais un tableau de caractères.
    Une chaine est un ensemble contigü de caractères différentes de '\0', suivi de ce même '\0'.

    recv écrit à l'adresse que tu demandes un bloc de la longueur que tu lui demandes, du moins, si c'est compatible avec ce qui a été envoyé.

    Il n'y a aucune garantie d'avoir une chaine.
    Par contre, tu peux ruser pour éviter de créer une faille par "buffer overflow": initialiser à 0 l'intégralité du tableau, et t'assurer que le tableau soit plus grand que la taille demandée.

  14. #14
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Citation Envoyé par leternel Voir le message
    C'est bon à savoir.
    Et donc le cast fonctionnerait. (beurk)
    Pourquoi beurk ?

    Citation Envoyé par leternel
    Tu ne peux pas utiliser puts avec ce que tu as reçu de recv.
    Du moins sans préparation.
    printf() c'est très bien sinon.

    Citation Envoyé par leternel
    recv écrit à l'adresse que tu demandes un bloc de la longueur que tu lui demandes, du moins, si c'est compatible avec ce qui a été envoyé.
    Tout à fait. Par-contre il est tout à fait courant d'envoyer un ID sur le type de message pour faiciliter sa récupération ensuite (je donne un loooong exemple à la fin de mon post).

    @JustyDark: 2 choses : premièrement, initialise tous les octets de ton char* à 0 si possible ! Deuxièmement : on récupère un int dans un int, pas dans un char*. Par-contre tu peux toujours t'amuser à afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    recv(sock, message, 2000, 0);
    int i = 0;
     
    while (i < sizeof(int))
        printf("%d\n", message[i++]);
    Ou alors tu peux le "convertir" (ce pas une conversion à proprement parler) de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    recv(sock, message, 2000, 0);
    int i = 0;
     
    memcpy(&i, message, sizeof(i));
    printf("%d\n", i);
    Mais je pense que le mieux reste quand même d'envoyer un id pour pouvoir faciliter la récupération du message. Exemple :

    Si tu envoies un nombre, tu mettras l'ID correspondant pour que le recv sache quoi lire. Par-contre, si tu veux envoyer un char*, il serait pratique de connaître sa longueur. Dans ce cas-là, tu enverras quelque chose dans ce style-là :

    [ID - 1 octet][taille du message - 4 octets non signés][message - nombre d'octets définis par taille message]

    Ainsi, ça te permettrait d'améliorer grandement la réception de tes données en faisant comme ceci :

    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
    28
    29
    30
    31
    32
    33
    34
    void get_all_data(int sock, void *p, uint size) {
        char *ptr = p;
        int got = 0;
        int tmp;
     
        while ((tmp = recv(sock, ptr + got, size - got, 0) > 0) {
             got += tmp;
             if (got >= size)
                 return;
        }
        // une erreur s'est produite, faudrait gérer ça
    }
     
    char *get_all_message_data(int sock) {
        int size;
        char *ret;
     
        get_all_data(sock, &size, sizeof(size));
        ret = malloc(sizeof(*ret) * (size + 1));
        ret[size] = 0;
        get_all_data(sock, ret, size);
        return ret;
    }
     
    recv(sock, &id, sizeof(id), 0);
     
    switch (id) {
        ...
        MESSAGE_TEXTE:
            char *msg = get_all_message_data(sock);
            printf("message recu : %s\n", msg);
            free(msg);
            break;
    }

  15. #15
    Membre émérite Avatar de SkyZoThreaD
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2013
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 585
    Par défaut
    Je plussoie imperio. Dans le cas ou le serveur peut s'attendre à recevoir des objets castés de différentes tailles (int, long, struct...) il est bien de faire un double envoi en commençant par envoyer un petit packet indiquant le type de données qu'on envoi, puis les données en question afin d'éviter que le cast échoue en ouvrant une faille de sécu ou un plantage. Il est à mon avis aussi important d'utiliser les types de données fixes du c++ (même si je ne sais pas si ils sont dispo en C pure) car selon l'architecture, un int n'a pas forcément la même taille

    comme ceci:http://en.cppreference.com/w/cpp/types/integer

  16. #16
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    En pratique, oui, ils sont aussi disponibles (http://en.cppreference.com/w/c/types/integer).

    (c'est l'un des côtés pratiques de ce site, il fait le C et le C++)

  17. #17
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Citation Envoyé par SkyZoThreaD Voir le message
    Il est à mon avis aussi important d'utiliser les types de données fixes du c++ (même si je ne sais pas si ils sont dispo en C pure) car selon l'architecture, un int n'a pas forcément la même taille

    comme ceci:http://en.cppreference.com/w/cpp/types/integer
    Ni même la même endianess. Un exemple avec cette page.

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/08/2011, 22h49
  2. Conversion d'un tableau int en tableau char
    Par lcoulon dans le forum Débuter
    Réponses: 7
    Dernier message: 11/12/2009, 11h53
  3. Ansistring et tableau de char
    Par rabbi_jaccob dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/12/2004, 11h51
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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