Это предупреждение, которое я получаю:
passing argument 1 of ‘strtok’ discards ‘const’ qualifier from pointer target
type [enabled by default]
Я хотел отключить эту операцию по умолчанию, может ли кто-нибудь помочь мне с этим?
Спасибо!
Это предупреждение, которое я получаю:
passing argument 1 of ‘strtok’ discards ‘const’ qualifier from pointer target
type [enabled by default]
Я хотел отключить эту операцию по умолчанию, может ли кто-нибудь помочь мне с этим?
Спасибо!
strtok
работает на месте: ему нужно маркировать строку, которую вы ему передали.
Конечно, вы можете принудительно применить неконстантное приведение, но это нарушит контракт. Что, если вызывающая сторона ожидает повторного использования переданной строки после вашей операции? Так что это беспроигрышный вариант.
Поэтому, если у вас есть какая-то постоянная строка, вы должны сделать копию перед ее использованием, например, используя strdup
char *copy = strdup(my_const_char);
toks = strtok(copy," ",NULL);
...
В конце концов, у вас есть все ваши токены в отдельных указателях, а память уже выделена и удерживается copy
. Если вам больше не нужны токены, free
ing copy
— это все, что вам нужно, чтобы очистить их.
Обратите внимание, что общий ответ на этот вопрос квалификатора const: 1 отбрасывает квалификаторы из целевого типа указателя