2017-09-10 4 views
1

C'est l'avertissement que je reçois:A propos de certains paramètres de strtok()

passing argument 1 of ‘strtok’ discards ‘const’ qualifier from pointer target 
type [enabled by default] 

Je voulais désactiver cette opération par défaut quelqu'un peut me aider?

Merci!

+0

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

Répondre

3

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