Necesito una forma de plataforma cruzada para obtener el directorio de trabajo actual (sí, getcwd hace lo que quiero). Pensé que esto podría hacer el truco:¿Qué es una forma de plataforma cruzada para obtener el directorio actual?
#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;
}
llegué esta lectura:
No debe haber fugas de memoria, y se debería funcionar en una Mac también, ¿correcto?
ACTUALIZACIÓN: Me temo que todavía le queda algo mal aquí (estoy tratando de evitar la creación de una matriz de caracteres con una longitud determinada, ya que no hay manera adecuada para obtener una longitud decente para getcwd):
char* a_cwd = getcwd(NULL,0);
string s_cwd(a_cwd);
free(a_cwd); // or delete a_cwd?
Si solo está "interesado" en la compatibilidad con Windows, Linux y Max OS X, entonces 'getcwd (NULL)' está bien definido. Todos extienden la función de la misma manera. –
Acepté esto, pero el comentario anterior es absolutamente correcto. Mi código tenía una pérdida de memoria, por lo que necesita resolver – rubenvb
@RobKennedy - para Linux, depende de la versión que se trate. Por ejemplo, en una casilla RHEL5, 'getcwd (NULL)' todavía se documenta como indefinido. –