Как использовать Strtok для токенизации Const char *?

У меня есть переменная const char *, которая может иметь значение типа OpenStack: OpenStack1. Я хочу tokenize this const char *, используя strtok, где разделитель (который имеет тип const char *) - ":". Но проблема strtok имеет следующий тип: char * strtok (char * str, const char * разделители);

Это означает, что я не могу использовать const char * для первого ввода, поскольку он должен быть char *. Не могли бы вы сказать мне, как я могу преобразовать этот const char * в char *?

Спасибо.

Ответ 1

Так как strtok фактически записывает в вашу строку, вам нужно сделать его доступной для записи копию tokenize;

char* copy = strdup(myReadonlyString);
...tokenize copy...
free(copy);

Ответ 2

Объявите его как массив:

char tokenedStr[] = "OpenStack:OpenStack1";

если это невозможно, скопируйте его в массив char.

Ответ 3

Вы можете сделать копию своей немодифицируемой строки, а затем использовать strtok.

Можно скопировать строки malloc и strcpy, чтобы скопировать строку.