2011-05-03 30 views

Trả lời

33

Sử dụng hàm getenv() - xem http://en.cppreference.com/w/cpp/utility/program/getenv. Tôi thích bọc phần này như sau:

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

tránh các vấn đề khi biến môi trường không tồn tại và cho phép tôi sử dụng chuỗi C++ dễ dàng để truy vấn môi trường. Tất nhiên, nó không cho phép tôi kiểm tra nếu một biến môi trường không tồn tại, nhưng nói chung không phải là một vấn đề trong mã của tôi.

+1

Đôi khi bạn có thể muốn phân biệt giữa 'không đặt' và 'trống' – sehe

+1

Phải .... tạo mẫu ...... ..... được xác định trên ... CharT. Oh chờ đợi, điều đó đòi hỏi SFINAE. Oh well. +1 –

+1

bạn có thể sử dụng 'boost :: optional ' làm kiểu trả về để phân biệt giữa vắng mặt và trống. –

8

Tương tự như trong C: sử dụng getenv (variablename).

1

Bạn chỉ có thể sử dụng 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 là một bài viết đầy đủ về vấn đề của bạn, từ trang web của tôi.

+0

Cảm ơn bạn đã đăng câu trả lời! Vui lòng đảm bảo đọc kỹ [FAQ on Self-Promotion] (http://stackoverflow.com/faq#promotion). Cũng lưu ý rằng nó là * bắt buộc * mà bạn đăng tuyên bố từ chối trách nhiệm mỗi lần bạn liên kết đến trang web/sản phẩm của riêng bạn. –

+0

Đó là "chức năng", không phải "fonction". (Tham khảo trang web của bạn.) Ngoài ra, tham số thứ ba cho 'main()' là không chuẩn, và không được bảo đảm để làm việc trên tất cả các nền tảng/trình biên dịch. – DevSolar

+0

có hoạt động với các biến môi trường được xuất/đặt sau khi chương trình bắt đầu không? – nurettin

Các vấn đề liên quan