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 :

Structure qui contient une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Par défaut Structure qui contient une chaine
    bonjour,
    j'espère que vous m'aidez à comprendre pourquoi j'ai ces warning
    en fait je voulais faire une structure qui contient des chaines de caracteres
    bon, j'ai lu dans des doc qu'il faut specifier la longueur de la chaine si on veux faire ce cas
    mais apparement ca marche sauf pour ces warning
    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
     
    #include<stdio.h>
     
    typedef struct chaine{
         int i;
         char *c;
    }chaine;
     
    void show(chaine ch) {
         printf("i=%d\n",ch.i);
         printf("c=%s\n",ch.c);
    }
     
    void f(chaine *ch)
    {
         char* s="hello";
         ch->c=malloc(strlen(s));
         strcpy(ch->c,s);
         ch->i=12;
    }
     
    int main(void){
         chaine p;
         f(&p);
         show(p);
         return 1;
    }
    warning: incompatible implicit declaration of built-in function ‘malloc’
    warning: incompatible implicit declaration of built-in function ‘strlen’
    warning: incompatible implicit declaration of built-in function ‘strcpy’

  2. #2
    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
    Il faut ajouter les headers suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdlib.h>
    #include <string.h>
    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

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    typedef struct
    {
       int i;
       char *c;
    } chaine;
     
    void show (chaine *ch);
    void f (chaine *ch);
     
    int main (void)
    {
       chaine p = { 0 };
     
       f (&p);
       if (p.c != NULL)
       {
          show (&p);
          free (p.c), p.c = NULL;
       }
       return EXIT_SUCCESS;
    }
     
    void show (chaine *ch)
    {
       printf ("i = %d\n"
               "c = %s\n", ch->i, ch->c);
    }
     
    void f (chaine *ch)
    {
       char const *s = "hello";
     
       ch->c = malloc (strlen (s) + 1);
       if (ch->c != NULL)
       {
          strcpy (ch->c, s);
          ch->i = 12;
       }
    }

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 57
    Par défaut
    rebonjour,
    peut etre j'ai mal exposé mon problème, en fait je veux construire une fonction similaire à f
    qui prend comme argument un pointeur sur chaine de caracteres qui contient des entiers et une structure où je vais enregistrer ces entiers. je fais ch->i=atoi(d); avec d une sous chaine que je l'affiche tres bien mais si je fais ch->i j'ai une erreur de segmentation.
    en plus quand je fais l'appel de f une premiere fois tout se passe tres bien et j'ai tout mes données dans la structure mais quand je fais l'appel de f une 2ème fois j'ai eu l'erreur de segmentation.
    j'espere que j'ai bien exposé mon problème cette fois.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/03/2013, 10h15
  2. Réponses: 20
    Dernier message: 19/09/2012, 15h56
  3. find sur un vector qui contient une structure
    Par kunda dans le forum SL & STL
    Réponses: 14
    Dernier message: 28/04/2009, 21h35
  4. Réponses: 5
    Dernier message: 18/10/2005, 21h53
  5. Réponses: 4
    Dernier message: 16/04/2004, 16h31

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