Как разбить строку в 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 один пропустить мимо / и остаются с последней частью строки.

Другие вопросы по тегам