Как разбить строку в C с помощью /
У меня есть строка со следующим рисунком:
char *str = "ai/aj/module_mat.mod";
и я хочу выбрать module_mat в качестве моей последней строки для дальнейшей логики. Я попытался использовать rindex(), чтобы я мог получить последнюю часть строки. Но я не могу сделать это на C. Что я делаю не так?
Код, который я пытаюсь это -
char *first = rindex(str, "/");
char *first = strtok(first, ".");
2 ответа
Ваша ошибка прямо здесь:
char *str = "ai/aj/module_mat.mod";
поскольку str
указывает на константу, это должно быть:
const char *str = "ai/aj/module_mat.mod";
Теперь ваш компилятор должен показать вам другие проблемы.
Так же:
char *first = rindex(str, "/");
поскольку rindex
возвращает указатель на константу, которую вы передали, этот указатель также должен быть const
,
char *first = strtok(first, ".");
Хм, для чего нужны документы strtok
сказать:
Если найден байт-разделитель, он перезаписывается нулевым байтом для завершения текущего токена, а strtok() сохраняет указатель на следующий байт; ...
Так strtok
изменяет то, на что указывает указатель, поэтому передача указателя на константу - это плохо! Вы не можете изменить константу.
Во-первых, строковый литерал является неизменяемым, поэтому связывать его с указателем изменяемого символа очень опасно. Сначала исправьте ваш код:
const char* str = "ai/aj/module_mat.mod";
Далее используйте strchr
:
#include <string.h>
const char* p = strchr(str, '/');
if (p != NULL) {
++p;
printf("Last part: %s\n", p);
} else {
printf("No '/' found in string %s.\n", str);
}
Если /
находится в строке, p
будет указывать на это, и, следовательно, p
может использоваться в качестве подстроки суффикса исходной строки, и нет необходимости изменять исходную строку. Мы продвигаемся p
один пропустить мимо /
и остаются с последней частью строки.