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 :

Spliter une chaine en fonction d'un caractère


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 594
    Billets dans le blog
    67
    Par défaut Spliter une chaine en fonction d'un caractère
    Bonjour,

    J'utilise la fonction str_split du tuto (chaines de caractères en c):
    dont voici le code:

    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
    char **str_split (char *s, const char *ct)
    {
       char **tab = NULL;
     
       if (s != NULL && ct != NULL)
       {
          int i;
          char *cs = NULL;
          size_t size = 1;
     
    /* (1) */
          for (i = 0; (cs = strtok (s, ct)); i++)
          {
             if (size <= i + 1)
             {
                void *tmp = NULL;
     
    /* (2) */
                size <<= 1;
                tmp = realloc (tab, sizeof (*tab) * size);
                if (tmp != NULL)
                {
                   tab = tmp;
                }
                else
                {
                   fprintf (stderr, "Memoire insuffisante\n");
                   free (tab);
                   tab = NULL;
                   exit (EXIT_FAILURE);
                }
             }
    /* (3) */
             tab[i] = cs;
             s = NULL;
          }
          tab[i] = NULL;
       }
       return tab;
    }

    et 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    char ** str_split (char *, const char *);
     
    int main()
    {
    char *ch1= "bonjour monsieur le coiffeur" ;
    int i;
    char **t = NULL;
     
    t=str_split (ch1," ");
     
    i=0;
     
    while (t[i]!=NULL)
    {
    printf("%d\n", t[i]);
    i++;
    }
     
    return 0;
     
    }

    Malheureusement ca plante et je ne vois pas pourquoi,

    merci à vous !

    User
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  2. #2
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Remplaces ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *ch1= "bonjour monsieur le coiffeur" ;
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char ch1[]= "bonjour monsieur le coiffeur" ;

  3. #3
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 594
    Billets dans le blog
    67
    Par défaut
    Merci à toi !

    J'ai aussi replacer la sortie
    printf("%s\n", t[i]);

    au lieu de:
    printf("%d\n", t[i]);

    merci à toi, mais peux-tu m'expliquer pourquoi ???
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    merci à toi, mais peux-tu m'expliquer pourquoi ???
    En fait, faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *ch1= "bonjour monsieur le coiffeur" ;
    correspond à créer un pointeur contenant l'adresse d'une chaîne littérale valant "bonjour monsieur le coiffeur".
    Or il n'est pas garantit que cette zone soit modifiable. L'un des bogues de la fonction strtok() est de l'appeller avec une chaine constante, ce qui doit être la cas à mon avis!


  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 594
    Billets dans le blog
    67
    Par défaut
    Merci !

    ce qui serait bien dans ces tutos c'est que pour chaque fonction il y est un petit exemple d'application...

    @+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/10/2014, 10h54
  2. Réponses: 11
    Dernier message: 05/12/2008, 10h31
  3. spliter une chaine de caractère
    Par solen dans le forum Débuter
    Réponses: 6
    Dernier message: 18/07/2008, 17h08
  4. parcourir une chaine et extraire depuis un caractère
    Par Dsphinx dans le forum Langage
    Réponses: 4
    Dernier message: 12/03/2007, 15h16
  5. Réponses: 2
    Dernier message: 21/07/2006, 12h16

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