Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 835
egor7 Avatar asked Feb 04 '14 16:02

egor7


People also ask

How do I see environment variables in console?

To list all the environment variables, use the command " env " (or " printenv "). You could also use " set " to list all the variables, including all local variables.

How do I find my environment variables in PATH?

Select Start select Control Panel. double click System and select the Advanced tab. Click Environment Variables. In the section System Variables find the PATH environment variable and select it.

Where are environment variables stored C?

Environment variables are stored together with command line arguments at the top of the process memory layout, above the stack.


1 Answers

  • 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.

like image 105
Ben Key Avatar answered Sep 22 '22 18:09

Ben Key