Ich brauche einen plattformübergreifenden Weg, um das aktuelle Arbeitsverzeichnis zu bekommen (ja, getcwd macht was ich will). Ich dachte, dies könnte den Trick tun:Was ist eine plattformübergreifende Möglichkeit, das aktuelle Verzeichnis zu erhalten?
#ifdef _WIN32
#include <direct.h>
#define getcwd _getcwd // stupid MSFT "deprecation" warning
#elif
#include <unistd.h>
#endif
#include <string>
#include <iostream>
using namespace std;
int main()
{
string s_cwd(getcwd(NULL,0));
cout << "CWD is: " << s_cwd << endl;
}
ich diese Lektüre bekam:
Es sollte keine Speicherlecks, und es sollte auch auf einem Mac funktionieren, richtig?
UPDATE: Ich fürchte, hier etwas noch falsch ist (Ich versuche, ein char-Array mit einer bestimmten Länge zu vermeiden, zu schaffen, da es keine richtige Art und Weise ist eine anständige Länge für getcwd zu bekommen):
char* a_cwd = getcwd(NULL,0);
string s_cwd(a_cwd);
free(a_cwd); // or delete a_cwd?
Wenn er "nur" an Kompatibilität mit Windows, Linux und Max OS X interessiert ist, dann ist 'getcwd (NULL)' gut definiert. Sie alle erweitern die Funktion auf die gleiche Weise. –
Ich habe das akzeptiert, aber der obige Kommentar ist imho korrekt. Mein Code hatte jedoch einen Speicherverlust, so dass – rubenvb
@RobKennedy gelöst werden muss - für Linux hängt es von der Version ab, die anvisiert wird. In einer RHEL5-Box ist zum Beispiel das 'getcwd (NULL)' immer noch als undefiniert dokumentiert. –