Печать всех переменных среды в C / C ++ - PullRequest
60 голосов
/ 18 января 2010

Как мне получить список всех переменных среды в C и / или C ++?

Я знаю, что getenv можно использовать для чтения переменных среды, но как мне их перечислить?

Ответы [ 9 ]

102 голосов
/ 18 января 2010

Переменные среды доступны для main() в качестве аргумента envp - массив строк с нулевым символом в конце:

int main(int argc, char **argv, char **envp)
{
  for (char **env = envp; *env != 0; env++)
  {
    char *thisEnv = *env;
    printf("%s\n", thisEnv);    
  }
  return 0;
}
47 голосов
/ 21 августа 2012
#include<stdio.h>

extern char **environ;

int main() {
  int i = 1;
  char *s = *environ;

  for (; s; i++) {
    printf("%s\n", s);
    s = *(environ+i);
  }

  return 0;
}
14 голосов
/ 18 января 2010

Я думаю, вы должны проверить environ. Используйте "man environment".

10 голосов
/ 18 января 2010

Ваш компилятор может предоставлять нестандартные расширения для основной функции, которая предоставляет дополнительную информацию о переменных среды. Компилятор MS и большинство разновидностей Unix имеют эту версию main:

int main (int argc, char **argv, char **envp)

где третий параметр - это информация о переменной среды - используйте отладчик, чтобы увидеть, что это за формат - возможно, нулевой завершенный список указателей на строки.

6 голосов
/ 30 октября 2014
int main(int argc, char **argv, char** env) {
   while (*env)
      printf("%s\n", *env++);
   return 0;
}
4 голосов
/ 18 января 2010

В большинстве сред вы можете объявить свой основной как:

main(int argc,char* argv[], char** envp)

envp содержит все строки окружения.

4 голосов
/ 18 января 2010
LPTCH WINAPI GetEnvironmentStrings(void);

http://msdn.microsoft.com/en-us/library/ms683187%28VS.85%29.aspx

РЕДАКТИРОВАТЬ: работает только на Windows.

4 голосов
/ 18 января 2010
int main(int argc, char* argv[], char* envp[]) {
   // loop through envp to get all environments as "NAME=val" until you hit NULL.
}
2 голосов
/ 18 января 2010

Если вы работаете в операционной системе Windows, вы также можете вызвать GetEnvironmentStrings(), который возвращает блок строк с нулевым символом в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...