Ein char Array von hinten bis zu einem bestimmten Zeichen zählen.
-
Hallo Community,
Ich hoffe das dieses Forum richtig ist, da mein Bsp. mehrere Dinge gleichzeitig verwendet.
Zu meinem Problem. Ich bekomme einen Pfad einer Datein über eine externe Funktion zugewiesen. Genauer einer JNI Funktion.
Dieser Pfad sieht ungefähr so aus:
C:\...\...\...\Database\MeineDB.nsfDamit man damit in C++ oder vielmehr C arbeiten kann, muss ich den jString in eine Char umwandeln:
const char *path_c = env->GetStringUTFChars(path,0);Nun möchte ich aus dieser Char nur die Datei:
MeineDB.nsfDas heisst, dass ich erstmal wissen sollte wieviele Zeichen es hat und dann von hinten die Zeichen bis zum \ abzählen und in ein seperates Array speichern.
Meine Frage ist dabei, ob ich einfach mit strlen die Zeichen zählen sollen und dann mit einer Schleife von Hinten nach vorne die Zeichen einlesen und woanders reinspeichern. Aber dann wäre der Dateiname umgekehrt geschrieben wie bekomme ich diese dann in der Richtigen reihenfolge wenn ich nicht weiss, wie lang der Dateiname ist?
-
[quote="cjmaster"]Damit man damit in C++ oder vielmehr C arbeiten kann, muss ich den jString in eine Char umwandeln:
const char *path_c = env->GetStringUTFChars(path,0);/quote] Jein. Du könntest ihn auch in einen std::string umwandeln. Für dein Such-Problem hat der sogar genau die richtige Methode:
http://www.cplusplus.com/reference/string/string/find_last_of/
Und um den entsprechenden Teilstring zu bekommen gibts auch was.
http://www.cplusplus.com/reference/string/string/substr/
-
Falls du sowieso schon Boost verwendest:
std::string fileName = boost::filesystem::path(env->GetStringUTFChars(path,0)).filename().string();
-
Leider benötige ich das ganze aber in einer Const Char da ich eine alte API verwende die ein Const Char als Parameter benötigt. Gibt es auch eine möglichkeit das anders zu regeln?
-
std::string::c_str()
-
deineMethode(fileName.c_str());
-
Hallo cjmaster,
es gibt andere Möglichkeiten aber die sind nur für Masochisten

Bei std::string geht's ganz einfach auch für alte API's
std::string filename; alteApi (fileName.c_str());Herzliche Grüsse
Walter
-
Vielen Dank für die sehr schnelle Hilfe!