strtok
fonctionne sur place: il doit marquer la chaîne que vous lui avez transmise.
Bien sûr, vous pourriez forcer la distribution non-const mais cela violerait le contrat. Que faire si l'appelant s'attend à réutiliser la chaîne transmise après votre opération? Donc c'est un non-go.
Donc, si vous avez une chaîne constante, vous devez faire une copie avant de l'utiliser, par exemple en utilisant strdup
char *copy = strdup(my_const_char);
toks = strtok(copy," ",NULL);
...
En fin de compte, vous avez tous vos jetons dans des pointeurs séparés, avec une mémoire déjà allouée et détenu par copy
. Une fois que vous n'avez plus besoin des jetons, free
ing copy
est tout ce dont vous avez besoin pour le nettoyer.
Notez qu'une réponse générique à cette question de qualification const est: Passing Argument 1 discards qualifiers from pointer target type
Il serait utile si vous nous montrer le code qui déclenche l'erreur avec un certain contexte. Cochez [Comment demander] (https://stackoverflow.com/help/how-to-ask) – myaut