Linux / argv、environ 和 env 的聯繫

栗子

#include <cstdio>
#include <unistd.h>

int main(int argc, char *argv[], char **env)
{
    printf("======================  argv  ======================\n");
    for (size_t i = 0; i < argc; i++)
    {
        printf("address = %p  ", *(argv + i));
        printf("argv[%lu] = %s\n", i, argv[i]);
    }
    printf("======================  env  ======================\n");
    for (size_t i = 0; env[i]; i++)
    {
        printf("address = %p  ", *(env + i));
        printf("env[%lu] = %s\n", i, env[i]);
    }
    printf("======================  environ  ======================\n");
    for (size_t i = 0; environ[i]; i++)
    {
        printf("address = %p  ", *(environ + i));
        printf("environ[%lu] = %s\n", i, environ[i]);
    }
    printf("======================  env 和 environ 比較 ======================\n");
    printf("env = %p\n", env);
    printf("environ = %p\n", env);

    return 0;
}

執行

./test.o  11111111 22222222 44444444 nnnnnnnn

結果(最終輸出太多,這裏只展示關鍵部分結果)

 

結論

  1. argv 和 env 的各個元素所指向的字符串在內存中是挨着的,argv 的字符串在前,env 的字符串在後。
  2. env == environ。

 

(SAW:Game Over!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章