栗子
#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
結果(最終輸出太多,這裏只展示關鍵部分結果)
結論
- argv 和 env 的各個元素所指向的字符串在內存中是挨着的,argv 的字符串在前,env 的字符串在後。
- env == environ。
(SAW:Game Over!)