Duplicar posible:
How to read Linux environment variables in c++Cómo poner el contenido del getenv() en una cadena
¿Cómo se puede cambiar lo siguiente para hacer lo que se supone que debe hacer?
string s = getenv("PATH");
Duplicar posible:
How to read Linux environment variables in c++Cómo poner el contenido del getenv() en una cadena
¿Cómo se puede cambiar lo siguiente para hacer lo que se supone que debe hacer?
string s = getenv("PATH");
Usted tiene que comprobar que el getenv
tuvieron éxito en primer lugar:
char const* tmp = getenv("PATH");
if (tmp == NULL) {
// Big problem...
} else {
std::string s(tmp);
// ...
}
(suponiendo que yo he adivinado correctamente con respecto a "lo que se supone que hacer".)
+1 Puede mejorar su respuesta elaborando más sobre el "gran problema" de Comportamiento indefinido al pasar null caracteres * punteros al constructor de cadenas. OP debe estar al tanto de ese detalle importante. –
@Als Buen punto. En este caso, esperaría que un programador cuidadoso quisiera hacer algo diferente si 'getenv' devuelve un puntero nulo (falla), pero definitivamente vale la pena señalar que la creación de una cadena con un puntero nulo es un comportamiento indefinido (y ** no ** una cadena vacía, a menos que accidentalmente sea el comportamiento "indefinido"). –
std::string getEnvVar(std::string const& key)
{
char const* val = getenv(key.c_str());
return val == NULL ? std::string() : std::string(val);
}
http://stackoverflow.com/questions/5866134/how-to-read-linux-environment-variables-in-c/5866166#5866166 –