http://c-faq.com/ansi/envp.html
有人問了 main() 的 "the third argument" *env[] 是啥?
一般就會講到這個可怕的歷史
在一般的 Unix 底下,很多人會跟你說,可以用 *env[] 或是 extern const char **environ 去問到
甚至給出了這樣的 code ...
#include <stdio.h> extern const char **environ; int main(int argc, const char *argv[], const char *env[]) { int i; for (i = 0; env[i]; i++) printf("env %02d: %s\n", i, env[i]); printf("=========================================\n"); for (i = 0; environ[i]; i++) printf("env %02d: %s\n", i, environ[i]); printf("=========================================\n"); printf(env==environ? "They are same.\n": "They are different.\n"); return 0; } /* Output: env 00: TMPDIR=/tmp/p0rIMq env 01: PATH=/usr/local/bin:/usr/bin:/bin env 02: PWD=/home/oAdQev env 03: LANG=en_US.UTF-8 env 04: HOME=/home/oAdQev env 05: SHLVL=0 ========================================= env 00: TMPDIR=/tmp/p0rIMq env 01: PATH=/usr/local/bin:/usr/bin:/bin env 02: PWD=/home/oAdQev env 03: LANG=en_US.UTF-8 env 04: HOME=/home/oAdQev env 05: SHLVL=0 ========================================= They are same. */
去 man 一下 environ (7) 可以看到相關的歷史
根據標準,我們應該使用 getenv 來跟系統要環境變數
以下是 C11 Standard 的節錄:
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#getenv
http://www.cplusplus.com/reference/cstdlib/getenv/
C++ 的 case 也類似,用 std::getenv()
http://en.cppreference.com/w/cpp/utility/program/getenv
更多說明可以看這篇棧溢出:
http://stackoverflow.com/questions/10321435/is-char-envp-as-a-third-argument-to-main-portable
No comments:
Post a Comment