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 :

fonction strtok manquante


Sujet :

C

  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut fonction strtok manquante
    Je ne dispose pas de la fonction strtok (c'est un vieux compilateur...)

    Quelqu'un aurait-il le code de cette fonction (si possible en s'appuyant sur des fonctions esistantes de string.h) ?

    Sinon je recode bien sur...
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 109
    Points
    109
    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
    44
    45
    46
    47
    48
    char *
    strtok(char *s, const char *delim)
    {
      const char *spanp;
      int c, sc;
      char *tok;
      static char *last;
     
     
      if (s == NULL && (s = last) == NULL)
        return (NULL);
     
      /*
       * Skip (span) leading delimiters (s += strspn(s, delim), sort of).
       */
     cont:
      c = *s++;
      for (spanp = delim; (sc = *spanp++) != 0;) {
        if (c == sc)
          goto cont;
      }
     
      if (c == 0) {			/* no non-delimiter characters */
        last = NULL;
        return (NULL);
      }
      tok = s - 1;
     
      /*
       * Scan token (scan for delimiters: s += strcspn(s, delim), sort of).
       * Note that delim must have one NUL; we stop if we see that, too.
       */
      for (;;) {
        c = *s++;
        spanp = delim;
        do {
          if ((sc = *spanp++) == c) {
    	if (c == 0)
    	  s = NULL;
    	else
    	  s[-1] = 0;
    	last = s;
    	return (tok);
          }
        } while (sc != 0);
      }
      /* NOTREACHED */
    }
    While I breath, I hope.

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Heu, j'ai ajouté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # define __rawmemchr strchr
    par contre, olds, cela sort d'où ?
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  4. #4
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Finalement, j'ai trouvé sur le net

    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
     
    static char *strtok_pos;
     
    char *
    strtok_r(char *ptr, const char *sep, char **end)
    {
        if (!ptr)
            /* we got NULL input so then we get our last position instead */
            ptr = *end;
     
        /* pass all letters that are including in the separator string */
        while (*ptr && strchr(sep, *ptr))
            ++ptr;
     
        if (*ptr) {
            /* so this is where the next piece of string starts */
            char *start = ptr;
     
            /* set the end pointer to the first byte after the start */
            *end = start + 1;
     
            /* scan through the string to find where it ends, it ends on a
               null byte or a character that exists in the separator string */
            while (**end && !strchr(sep, **end))
                ++*end;
     
            if (**end) {
                /* the end is not a null byte */
                **end = '\0';  /* zero terminate it! */
                ++*end;        /* advance last pointer to beyond the null byte */
            }
     
            return start; /* return the position where the string starts */
        }
     
        /* we ended up on a null byte, there are no more strings to find! */
        return NULL;
    }
     
    char *strtok(char *s, const char *delim)
    {
      return strtok_r(s,delim,&strtok_pos);
    }
    Merci et bon Dimanche
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

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

Discussions similaires

  1. utilisation fonction strtok
    Par john123 dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2007, 11h58
  2. [NASM] Programmation fonction strtok
    Par moustiks dans le forum Assembleur
    Réponses: 4
    Dernier message: 15/01/2007, 09h30
  3. Fonction strtok
    Par benjiprog dans le forum C
    Réponses: 7
    Dernier message: 21/03/2006, 20h38
  4. Fonction strtok et récupération des fragments
    Par GarGamel55 dans le forum Langage
    Réponses: 7
    Dernier message: 18/02/2006, 19h27
  5. du mal à comprendre la fonction strtok
    Par thierry_b dans le forum C
    Réponses: 2
    Dernier message: 25/11/2005, 10h37

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