How to get environment variables in C in a cross platform way

c, c++, cross-platform, environment-variables

Solution

- `getenv` is available on GNU/Linux, Mac OS X, and Microsoft Windows.

- `setenv` is available of GNU/Linux and Mac OS X but not on Microsoft Windows.

- `putenv`, like `getenv`, is available on GNU/Linux, Mac OS X, and Microsoft Windows.

Thus `getenv` and `putenv` are your best cross-platform options.

Problem

I'm using the following code in OSX and in Windows Vista: ``` #include <stdio.h> #include <string.h> extern char **environ; int main(int argc, char **argv) { int i; for (i = 0; environ[i] != NULL; i++) { printf("var = %s - %d\n", environ[i], (int)strlen(environ[i])); } return 0; } ``` On OSX compile it with `cc`, on Windows - with 'cl' from Windows SDK 7.1 (with Redistributable Packages: Microsoft Visual C++ 2010 in it). I define the same ENV variables in both OS in Russian language: MY_ENV='russian letters goes here'. And have got a difference about 2 times in a length of a strings. This length I'm planning to use in `malloc` and want them be the same. How can I get the same lengths correctly, in CRT way?

Original source