Как извлечь оставшуюся подстроку из strrchr() или strchr()?
Допустим, у меня есть следующая строка, которая выглядит как путь к файлу:
char *filepath = "this/is/my/path/to/file.jpg";
я могу использовать strrchr()
извлекать file.jpg
следующее:
char *filename = strrchr(filepath, '/') + 1;
Теперь мне нужно извлечь и сохранить остаток строки this/is/my/path/to
, Как мне сделать это наиболее эффективным способом? Обратите внимание, что я хотел бы избежать использования strtok()
или же regex
или большие итерационные циклы.
Будет очень приятно, если:
Я могу применить тот же метод извлечения подстроки для strchr()
где я извлек подстроку this
с помощью strchr(filepath, '/')
и теперь мне нужно извлечь остальную часть подстроки is/my/path/to/file.jpg
2 ответа
Скопируйте все до имени файла, затем добавьте '\0'
:
int pathLen = filename - filepath;
char *path = (char *) malloc(pathLen + 1);
memcpy(path, filepath, pathLen);
path[pathLen] = '\0';
...
free(path);
Если ваша строка находится в доступной для записи памяти (т. Е. Не строковый литерал), вы можете сделать это
char *p = strrchr(filepath, '/');
*p = '\0';
char *filename = p + 1;
это даст вам путь к файлу, указывающий на "this/is/my/path/to", а имя файла указывает на "file.jpg". Без какого-либо копирования.