TP sur l'en-tête <string.h> en C

a marqué ce sujet comme résolu.

Bonjour à tous, je suis en train de réalisé le TP du cours sur le C concernant l’en-tête <string.h>, et je ne comprends pas une partie du code de la correction pour la fonction strtok(). Voici le code mis dans la correction :

char *xstrtok(char *chaine, char *liste)
{
    static char *dernier;
    char *base = (chaine != NULL) ? chaine : dernier;

    if (base == NULL)
        return NULL;

separateur_au_debut:
    for (char *sep = liste; *sep != '\0'; ++sep)
        if (*base == *sep)
        {
            ++base;
            goto separateur_au_debut;
        }

    if (*base == '\0')
    {
        dernier = NULL;
        return NULL;
    }

    for (char *s = base; *s != '\0'; ++s)
        for (char *sep = liste; *sep != '\0'; ++sep)
            if (*s == *sep)
            {
                *s = '\0';
                dernier = s + 1;
                return base;
            }

    dernier = NULL;
    return base;
}

C’est la ligne "dernier = s + 1" que je ne comprends pas, car en faisant ça on ne va pas perdre le premier caractère de la chaîne lors de l’appel suivante ? Car ici s pointe sur '\0’, qui était anciennement un séparateur. Donc s + 1 pointe sur le premier caractère suivant le séparateur, non ? Merci d’avance pour vos réponses ;)

+0 -0

Lorsque tu fais :

const char* t = "ache"; 

Ici, t pointe vers 'a', vers le premier caractère de la chaîne.

Autre exemple.

const char* base = "Taurre\0ache"; // Deux chaînes justaposées
const char* s = base + strlen(base); // Ici, s pointe sur '\0'
const char* dernier = s + 1;

Ici, dernier pointe sur 'a'. Donc la chaîne qu’il désigne est bien "ache".

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte