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 :

problem de chaine de caractere dans une structure


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Par défaut problem de chaine de caractere dans une structure
    salut tout le monde c'est un peu debile mais jai pas pu trouve de reponse :s
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    trypedef struct personne
    {
       int age;
       char nom[30];
    }nouveau;
    void main()
    {
    nouveau p;
    p.age=20;
    p.nom="NomDupersonne";
    }
    he ben quand je compile jai l'erreur suivant type incompatible pour p.nom="nomdupersonne" ???? esque vous pouvez m'aider a ce point merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    une chaine de caractères se copie avec strcpy, pas avec =...

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Par défaut
    "chaine de caractère" + "c" @ google , essaie tu vas voir
    Le premier lien est d'ailleurs sur developpez chez moi

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct personne
    {
      ...
       char nom[30];
    }nouveau;
    void main()
    {
    ...
    p.nom="NomDupersonne";
    p.nom est un tableau et on ne peut pas jamais écrire : tableau = quelque chose.
    "NomDupersonne" est une adresse. C'est l'adresse du premier élément de la chaîne (non modifiable) qui contient "NomDupersonne".

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Par défaut
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    typedef struct personne
    {
      ...
       char nom[30];
    }nouveau;
    void main()
    {
    ...
    p.nom="NomDupersonne";
    p.nom est un tableau et on ne peut pas jamais écrire : tableau = quelque chose.
    "NomDupersonne" est une adresse. C'est l'adresse du premier élément de la chaîne (non modifiable) qui contient "NomDupersonne".
    et comment faire dans mon cas ??!!
    merci d'avance

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    je te l'ai dit...

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    je te l'ai dit...
    désoler mais je debutant jai pas bien saisi ce que tu veu dire tu peu me donne un petit example de structure ou on utilise une chaine de caractere?
    Merci infiniment

  8. #8
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    bon, pour la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(p.nom, "NomDupersonne");
    Mais commences plutôt à ouvrir un tuto ou un bouquin sur le C

    Commences aussi par faire un tour sur les tuto C du site, par exemple ici
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Par défaut
    Citation Envoyé par vicenzo Voir le message
    bon, pour la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpy(p.nom, "NomDupersonne");
    Mais commences plutôt à ouvrir un tuto ou un bouquin sur le C

    Commences aussi par faire un tour sur les tuto C du site, par exemple ici
    je vais suivre ton conseille merci mon cher

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Août 2007
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 168
    Par défaut
    salut
    tu as le choix :

    1. char *nom;
    puis tu fait : nom="nomdu personne";

    2. char nom[30]
    puis tu fait : strcpy(nom,"nomdu personne");

    bon courage

  11. #11
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    bonjour,

    Voici une petite explication si tu ne comprend pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct machin{
    char * chaine1;
    char * chaine2;
    ...
    char * chaineX; /* tes pointeurs de chaine de char */
    struct machin *suivant; /* si tu fais une liste chainée */
    }tableau_de_chaines;
    Chaque fois que tu vas vouloir créer un élément qui aura cette structure, tu n'auras pas à l'allouer.
    Genre dans ton code tu mettras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_de_chaines montableau;
    Comme ta structure ne contient que des pointeurs, tu n'auras pas besoin de les allouer (les pointeurs ont une taille fixe, celle de la profondeur d'adressage de la machine). Puis pour affecter un mot dans une chaine tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montableau.chaine1 = "toto";
    Ensuite pour la fonction strcpy() qui est contenu dans la bibliothèque string.h,
    son rôle est de copier une chaine entière dans une zone de mémoire. Son prototype est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *strcpy(char *destination, char *source);
    Le caractère "\0" est lui aussi recopié et la fonction renvoie un pointeur vers la nouvelle chaine de strcpy().

    ATTENTION: avant d'utiliser strcpy(), il faut allouer assez de place pour la chaine destinataire car strcpy() recopie systématiquement la totalité de la chaine source.

    Donc dans ton cas tu fais soit:
    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>
    #include <string.h>
     
    typedef struct personne
    {
       int age;
       char nom[30];
    }nouveau;
     
    int main(void)
    {
        nouveau p;
     
        p.age=20;
        strcpy(p.nom, "NomDupersonne");
        printf("%s", p.nom);
        return 0;
    }
    Soit:
    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 <stdio.h>
     
    typedef struct personne
    {
       int age;
       char *nom;
    }nouveau;
     
    int main(void)
    {
        nouveau p;
     
        p.age=20;
        p.nom="NomDupersonne";
        printf("%s", p.nom);
        return 0;
    }
    Voila en espérant t'avoir éclairé sur le sujet

  12. #12
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Par défaut
    Citation Envoyé par snake264 Voir le message
    bonjour,

    Voici une petite explication si tu ne comprend pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct machin{
    char * chaine1;
    char * chaine2;
    ...
    char * chaineX; /* tes pointeurs de chaine de char */
    struct machin *suivant; /* si tu fais une liste chainée */
    }tableau_de_chaines;
    Chaque fois que tu vas vouloir créer un élément qui aura cette structure, tu n'auras pas à l'allouer.
    Genre dans ton code tu mettras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau_de_chaines montableau;
    Comme ta structure ne contient que des pointeurs, tu n'auras pas besoin de les allouer (les pointeurs ont une taille fixe, celle de la profondeur d'adressage de la machine). Puis pour affecter un mot dans une chaine tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montableau.chaine1 = "toto";
    Ensuite pour la fonction strcpy() qui est contenu dans la bibliothèque string.h,
    son rôle est de copier une chaine entière dans une zone de mémoire. Son prototype est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *strcpy(char *destination, char *source);
    Le caractère "\0" est lui aussi recopié et la fonction renvoie un pointeur vers la nouvelle chaine de strcpy().

    ATTENTION: avant d'utiliser strcpy(), il faut allouer assez de place pour la chaine destinataire car strcpy() recopie systématiquement la totalité de la chaine source.

    Donc dans ton cas tu fais soit:
    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>
    #include <string.h>
     
    typedef struct personne
    {
       int age;
       char nom[30];
    }nouveau;
     
    int main(void)
    {
        nouveau p;
     
        p.age=20;
        strcpy(p.nom, "NomDupersonne");
        printf("%s", p.nom);
        return 0;
    }
    Soit:
    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 <stdio.h>
     
    typedef struct personne
    {
       int age;
       char *nom;
    }nouveau;
     
    int main(void)
    {
        nouveau p;
     
        p.age=20;
        p.nom="NomDupersonne";
        printf("%s", p.nom);
        return 0;
    }
    Voila en espérant t'avoir éclairé sur le sujet
    merci bien pour l'explication

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

Discussions similaires

  1. chaine de caractere dans une requete
    Par shepounet dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/03/2009, 15h43
  2. supprimer une chaine de caractere dans une ligne.
    Par wadabush dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 11/02/2009, 20h59
  3. [Tableaux] passer une chaine de caracteres dans une URL ?
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2008, 15h06
  4. erreur pour une insertion d'une chaine de caractere dans une cellule
    Par amel95140 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/10/2006, 09h09
  5. Réponses: 2
    Dernier message: 04/11/2005, 11h35

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