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 :

[Fichier]Problème avec strdup et parcours de chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Par défaut [Fichier]Problème avec strdup et parcours de chaine
    Bonjour, en fait je voudrai découper une chaine passé en sous chaine pour les ranger dans un tableau. J'ai une erreur de segmentation au niveau de *(s+i) = '\0';

    J'ai une segmentation fault que je ne comprend pas ...

    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
    44
    45
    46
    47
    48
    49
    50
    void initFicOff(){
     
        FILE *fd =fopen("venus.off","r");
     
        char *s="Bonjour les amis";
        char **ligne;
     
        //s = fgets(s, 1024, fd);
        ligne = strTab(s);
    }
     
    //fonction qui calcul le nombre de mots dans la ligne (séparateur: '\t')
    int mots(char *s)
    {
        int i;
        int cpt;
     
        for (i=0, cpt=1; s[i]!=0; i++)
        {
            if (s[i] == ' ') cpt++;
        }
        return cpt;
    }
     
    char **strTab(char *s){
        int nbm;
        int i,j=0;
        char **mtab;
     
        nbm = mots(s);  
        mtab = malloc(sizeof(*mtab) * nbm + 1);
     
        for (i=0, nbm=0; s[i] !='\n' && s[i] != '\r' && s[i] !=0; i++)
        {
            if (s[i] ==' ')
     
            {
    	   *(s+i) = '\0';
                mtab[nbm] = strdup(s);
                *s=*(s+i)+1;
                nbm++;
            }
     
        }
     
        *(s+i) = '\0';
        mtab[nbm++]=strdup(s);
        mtab[nbm]=0;
        return (mtab);
    }
    Merci d'avance pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    C'est normal car tu as initialisé avec char *s="Bonjour les amis"; qui est une chaîne située dans une zone non modifiable de la mémoire.
    Si tu fais un fgets(s, 1024; fd), celà ne devrait pas se produire.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: [Fichier]Problème avec strdup et parcours de chaine
    Citation Envoyé par reyman
    Merci d'avance pour votre aide
    Merci de poster du code qui compile. On ne peut pas deviner ce que tu as oublier...
    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
     
    main.c: In function `initFicOff':
    main.c:11: error: `FILE' undeclared (first use in this function)
    main.c:11: error: (Each undeclared identifier is reported only once
    main.c:11: error: for each function it appears in.)
    main.c:11: error: `fd' undeclared (first use in this function)
    main.c:11: warning: implicit declaration of function `fopen'
    main.c:17: warning: implicit declaration of function `strTab'
    main.c:17: warning: assignment makes pointer from integer without a cast
    main.c: At top level:
    main.c:33: error: conflicting types for 'strTab'
    main.c:17: error: previous implicit declaration of 'strTab' was here
    main.c: In function `strTab':
    main.c:39: warning: implicit declaration of function `malloc'
    main.c:47: warning: implicit declaration of function `strdup'
    main.c:35: warning: unused variable `j'

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Trap D
    C'est normal car tu as initialisé avec char *s="Bonjour les amis"; qui est une chaîne située dans une zone non modifiable de la mémoire.
    Si tu fais un fgets(s, 1024; fd), celà ne devrait pas se produire.
    A condition que s soit un tableau de 1024 char...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 12
    Par défaut
    J'ai pas fait de malloc pour :

    char * et
    ligne ** ...

    Pas impossible que ca vienne de ca, je teste et vous tient au courant.
    Je posterai le code executable (dslé) des que je suis a la fac.

    Merci.

Discussions similaires

  1. [AC-2007] Pb Importation fichier texte avec délimiteur contenu dans la chaine texte
    Par billybob2 dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/11/2012, 13h27
  2. Réponses: 1
    Dernier message: 09/10/2012, 22h10
  3. Problème avec namespace pour parcours xml
    Par ramroum1986 dans le forum APIs
    Réponses: 3
    Dernier message: 20/05/2010, 12h46
  4. Réponses: 1
    Dernier message: 04/02/2010, 20h57
  5. Réponses: 2
    Dernier message: 08/03/2008, 14h24

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