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

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