В POSIX-совместимых системах (* nix) для этого dirname(3)
есть общедоступная функция. На окнах есть _splitpath
.
Функция _splitpath пробивает путь
на четыре составляющих.
void _splitpath(
const char *path,
char *drive,
char *dir,
char *fname,
char *ext
);
Таким образом, результат (это то, что, я думаю, вы ищете) будет в dir
.
Вот пример:
int main()
{
char *path = "c:\\that\\rainy\\day";
char dir[256];
char drive[8];
errno_t rc;
rc = _splitpath_s(
path, /* the path */
drive, /* drive */
8, /* drive buffer size */
dir, /* dir buffer */
256, /* dir buffer size */
NULL, /* filename */
0, /* filename size */
NULL, /* extension */
0 /* extension size */
);
if (rc != 0) {
cerr << GetLastError();
exit (EXIT_FAILURE);
}
cout << drive << dir << endl;
return EXIT_SUCCESS;
}