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 régulier
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Points : 77
    Points
    77
    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 éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    une chaine de caractères se copie avec strcpy, pas avec =...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Points : 72
    Points
    72
    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 éminent sénior
    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
    Points : 13 926
    Points
    13 926
    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".
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Points : 77
    Points
    77
    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 éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    je te l'ai dit...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Points : 77
    Points
    77
    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 : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    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 régulier
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Points : 77
    Points
    77
    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 régulier
    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
    Points : 82
    Points
    82
    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 éminent sénior

    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 : 36
    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
    Points : 13 312
    Points
    13 312
    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
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  12. #12
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 126
    Points : 77
    Points
    77
    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