Pierwszym argumentem przekazanym do programu jest ścieżka pliku binarnego. Bardzo często jest ona względna wobec aktualnego katalogu roboczego, dlatego musisz użyć funkcji wyznaczającej absolutną ścieżkę (np. relpath). Na końcu musisz odrzucić ostatni człon uzyskanej ścieżki.
Przykładowa funkcja:
#include <limits.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
std::string baseDir(const char *relativePath) {
char *absolute = relpath(relativePath, nullptr);
if (absolute == nullptr)
return std::string();
auto lastSlash = strrchr(absolute);
if (lastSlash == nullptr) {
std::string result(absolute);
free(absolute);
return result;
}
int len = lastSlash - absolute;
std::string result(absolute, len);
free(absolute);
return result;
}
int main(int argc, char **argv) {
std::cout << baseDir(argv[0]) << std::endl;
return 0;
}
Pisałem z palca, bez kompilowania, więc kod może nie działać