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 :

afficher une chaine de caractères


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut afficher une chaine de caractères
    bonjour,

    j'ai un probleme pour afficher une chaine de caractere qui est dans une structure...
    voici une representation simple du probleme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    typedef struc  cellule{
    char tab[3];
    struct cellule* suivant;
    }cellule;
     
    int main(void)
    {cellule* cel;
    cel->tab="ab";
    printf("%s",cel->tab);
    return 0;
    }
    merci à vous

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    bien le bonjour,

    ta cellule n'existe pas. tu ne declares qu'un pointeur vers une hypothetique cellule donc le simple fait d'ecrire cel->tab declenche une erreur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Par défaut
    ca devrait etre mieux comme ca.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main(void) {
      cellule* cel=(cellule*)malloc(sizeof(cellule*));
      int i;
      char* pattern="ab";
      for(i=0;i<3;i++)
        cel->tab[i]=pattern[i];
      printf("%s\n",cel->tab);
      return 0;
    }
    a toi de parametrer ensuite pour la valeur 3 qui devrait etre contenue dans 1 #define tabLength pae exemple et utiliser partout dans ton programme.

    Stef

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    merci pour votre réponse.
    mais, je n'ai mis qu'un bout du code j'ai bien fait une fonction qui cree une cellule, si c'est ca la question

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Par défaut
    en plus d'allouer la cellule tu dois ecrire une boucle pour ecrire les valeurs de ton const char * dans cel->tab. il n'y a pas d'operateur d'affectation d'un const char * vers un tab.

    Stef

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    merci bien pour ton aide, mais en fait mon probleme est beaucoup plus compliqué que cela;je vous explique:

    j ai fait une fonction creation qui prend en argument (tableau de caractere,un entier, une entier, un pointeur).
    apres j appelle cette fonction dans le main comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main(void)
    {
    cellule *cel=(cellule*)malloc(sizeof(cellule*);
    int i;
    cel=creation("abc",4,2,NULL);
    printf("%s",cel->tab);
    return 0;
    }
    et je voudrais afficher ce fameu tableau de caractere, j ai essayé d'introduire une boucle for comme vous l aviez bien indiqué, mais je vois pas vraiment comment..

    merci encore une fois!!

  7. #7
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    bonjour

    on pourrait voir la définition de creation ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    En fait, mes structures sont tres compliquées c'est pourquoi j essaie de vous décrire le probleme le plus simplement possible; je sais pas si c'est lisible ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cellule* creation(char tableau[3], cellule* ptr)
    { cellule* cel;
    cel->tab[3]=tableau[3];
    cel->suivant=ptr;
    return cel;
    }

  9. #9
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    1) Il faut allouer la mémoire pour ta structure

    2) faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel->tab[3] = tableau[3]
    Ne copie pas le tableau mais affecte à la 4ème case du tableau cel->tab le 4ème élément du tableau 3 (qui n'a que 3 éléments vu que tu le déclare comme char tableau[3] donc les indices vont de 0 à 2!!!)

    Essaie plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cellule* creation(char *tableau, cellule* ptr)
    { cellule* cel;
     
    //Allocation
    cel = malloc(sizeof(*cel));
    if(cel==NULL)
       return NULL;
     
    strcpy(cel->tab,tableau);
    cel->suivant=ptr;
    return cel;
    }
    Jc

  10. #10
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Citation Envoyé par felicity
    En fait, mes structures sont tres compliquées c'est pourquoi j essaie de vous décrire le probleme le plus simplement possible; je sais pas si c'est lisible ou pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cellule* creation(char tableau[3], cellule* ptr)
    { cellule* cel;
    cel->tab[3]=tableau[3];
    cel->suivant=ptr;
    return cel;
    }
    et rebelotte, tu ecris dans une cellule qui n'existe pas. il est passe ou le malloc ?

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par scol30
    cellule* cel=(cellule*)malloc(sizeof(cellule*));
    est faux!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cellule* cel= malloc(sizeof(cellule));
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     cellule* cel= malloc(sizeof(*cel));
    est mieux!

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    le malloc y est bien sur, j ai juste envoyé la fonction création suite à la demande de quelqu un

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Citation Envoyé par fearyourself
    1) Il faut allouer la mémoire pour ta structure

    2) faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cel->tab[3] = tableau[3]
    Ne copie pas le tableau mais affecte à la 4ème case du tableau cel->tab le 4ème élément du tableau 3 (qui n'a que 3 éléments vu que tu le déclare comme char tableau[3] donc les indices vont de 0 à 2!!!)

    Essaie plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    cellule* creation(char *tableau, cellule* ptr)
    { cellule* cel;
     
    //Allocation
    cel = malloc(sizeof(*cel));
    if(cel==NULL)
       return NULL;
     
    strcpy(cel->tab,tableau);
    cel->suivant=ptr;
    return cel;
    }
    Jc

    C'était bien ca fallait copier le tableau avec la fonction strcpy!!

    Merci infiniment à toi 'Jc' et à tous ceux qui ont pris la peine de me répondre !!

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2007, 09h56
  2. Afficher une chaine de caractères
    Par momoh dans le forum MATLAB
    Réponses: 1
    Dernier message: 07/10/2007, 15h43
  3. Réponses: 7
    Dernier message: 20/04/2007, 16h42
  4. Réponses: 9
    Dernier message: 19/12/2006, 12h02
  5. [Débutant]Afficher une chaine de caractères
    Par cyrille2k5 dans le forum Oracle
    Réponses: 3
    Dernier message: 02/06/2006, 16h04

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