2011-05-03 14 views

risposta

33

Utilizzare la funzione getenv() - vedere http://en.cppreference.com/w/cpp/utility/program/getenv. Mi piace per avvolgere in questo modo:

string GetEnv(const string & var) { 
    const char * val = ::getenv(var.c_str()); 
    if (val == 0) { 
     return ""; 
    } 
    else { 
     return val; 
    } 
} 

che evita problemi quando la variabile di ambiente non esiste, e mi permette di usare le stringhe di C++ facilmente per interrogare l'ambiente. Certo, non mi permette di verificare se una variabile d'ambiente non esiste, ma in generale non è un problema nel mio codice.

+1

A volte potresti voler distinguere tra "non impostato" e "vuoto" – sehe

+1

Deve .... rendere ...... il modello ..... basato su .... CharT. Oh aspetta, questo richiede SFINAE. Oh bene. +1 –

+1

potresti usare 'boost :: opzionale ' come tipo di ritorno per distinguere tra assenza e vuoto. –

8

Come in C: utilizzare getenv (nome variabile).

1

Si potrebbe semplicemente usare char * env []

int main(int argc, char* argv[], char* env[]){ 
    int i; 
    for(i=0;env[i]!=NULL;i++) 
    printf("%s\n",env[i]); 
    return 0; 
} 

here è un articolo completo circa il tuo problema, dal mio sito web .

+0

Grazie per aver postato la risposta! Si prega di leggere attentamente le [FAQ sulla promozione di sé] (http://stackoverflow.com/faq#promotion) attentamente. Si noti inoltre che * è * richiesto * di pubblicare un disclaimer ogni volta che si collega al proprio sito/prodotto. –

+0

È "funzione", non "funzione". (Riferendosi al tuo sito web.) Inoltre, il terzo parametro di 'main()' non è standard, e non è garantito che funzioni su tutte le piattaforme/compilatori. – DevSolar

+0

funziona con le variabili di ambiente che vengono esportate/impostate dopo l'avvio del programma? – nurettin

Problemi correlati