Почему компиляция с -Wpedantic предупреждает о присваивании из несовместимого типа указателя при передаче строкового литерала в качестве второго параметра в char *strtok(char *str, const char *delim); и что с этим можно сделать?
второй аргумент не должен быть проблемой. Можете ли вы поделиться фрагментом кода, который вызывает ошибку?
Пожалуйста, покажите пример кода.
Пожалуйста, покажите реальный код. Проблем быть не должно — значит, вы делаете что-то необычное. Он не должен быть очень большим — 10 строк будут неожиданностью — так что вы создадите хороший MCVE (минимальный воспроизводимый пример).
Это не должно. Вместо описания кода покажи код.
@ShadowRanger двое из нас неправильно его поняли, но обычно в качестве второго параметра используется строковый литерал.
@WeatherVane: Да. Это была моя первая мысль, как и сразу же, как я увидел "strtok" и "строковый литерал" вместе в посте. Без кода мы никогда не узнаем.
Если бы это была константа, это был бы -Wwrite-strings, а не -Wpedantic, в сообщении об ошибке было бы указано discards 'const' qualifier from pointer target type (не несовместимый тип указателя), и в нем не упоминалось бы «назначение».





Поскольку предупреждение гласит: «Назначение из несовместимого типа указателя», проблема должна быть в левой части присваивания от strtok, например, так:
int *foo;
foo = strtok(s, ",");
Вы должны убедиться, что левая часть вашего назначения имеет совместимый тип указателя, например char * или void *.
@WeatherVane: он не записывает во второй параметр. В OP конкретно говорится, что компилятор помечает параметр второй, разделитель, который помечен как
const. Нам нужен минимальный воспроизводимый пример.