2011-05-03 23 views

cevap

15

Sen getenv ilk başarılı olduğunu kontrol etmek zorunda:

char const* tmp = getenv("PATH"); 
if (tmp == NULL) { 
    // Big problem... 
} else { 
    std::string s(tmp); 
    // ... 
} 

(Ben "o yapmak gerekeni" açısından doğru tahmin ettik varsayalım.)

+1

+1 Cevabınızı "Büyük Problem" hakkında daha fazla ayrıntıya girerek daha iyi yapabilirsiniz.Boş char * işaretçileri String yapıcısına iletirken tanımsız davranış. OP bu önemli detayın farkında olmalıdır. –

+0

@Als Good point. Bu durumda, 'getenv' boş bir gösterici (başarısız) döndürürse dikkatli bir programcının farklı bir şey yapmak istemesini beklerdim, ancak boş bir işaretçi ile bir dize oluşturmanın tanımlanmamış bir davranış olduğunu belirtmek gerekir (ve ** değil). ** "undefined" davranışı yanlışlıkla gerçekleşmedikçe boş bir dize. –

7
std::string getEnvVar(std::string const& key) 
{ 
    char const* val = getenv(key.c_str()); 
    return val == NULL ? std::string() : std::string(val); 
} 
İlgili konular