Как извлечь оставшуюся подстроку из strrchr () или strchr ()? - PullRequest
0 голосов
/ 06 мая 2018

Допустим, у меня есть следующая строка, которая выглядит как путь к файлу:

 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 голосов
/ 06 мая 2018

Если ваша строка находится в доступной для записи памяти (т. Е. Не строковый литерал), вы можете сделать это

char *p =  strrchr(filepath, '/');
*p = '\0';
char *filename = p + 1;

это даст вам путь к файлу, указывающий на "this / is / my / path / to" и имя файла, указывающее на "file.jpg". Без копирования.

0 голосов
/ 06 мая 2018

Скопируйте все до имени файла, затем добавьте '\0':

int   pathLen = filename - filepath;
char *path = (char *) malloc(pathLen + 1);
memcpy(path, filepath, pathLen);
path[pathLen] = '\0';

...

free(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...