【问题标题】:How to get environment variables in C in a cross platform way如何以跨平台的方式在 C 中获取环境变量
【发布时间】:2014-02-28 17:12:31
【问题描述】:

我在 OSX 和 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;
}

在 OSX 上使用 cc 编译它,在 Windows 上 - 使用 Windows SDK 7.1 中的“cl”(其中包含可再发行包:Microsoft Visual C++ 2010)。

我在两个操作系统中用俄语定义了相同的 ENV 变量:MY_ENV='russian letters goes here'。并且在一个字符串的长度上有大约 2 倍的差异。

我打算在malloc 中使用这个长度并希望它们相同。如何以 CRT 方式正确获得相同的长度?

【问题讨论】:

  • 我猜一个是使用 UTF8 编码,另一个是本地代码页?
  • 既然环境块是由操作系统预先分配的,那么这有什么关系呢?如果您打算将其复制到自己的变量中,只需先测量其长度并分配足够的空间即可。
  • 用VC你可以使用wmain,它可以有第三个参数env,它应该是UTF-16,然后你可以转换成UTF-8。
  • getenvsetenv 有什么问题?
  • 我赞同@DarkFalcon 的评论。长度似乎真的不是问题。只需获取其(参数的)长度,使用它为变量分配空间,然后将参数复制到分配的变量。

标签: c++ c cross-platform environment-variables


【解决方案1】:
  • getenv 适用于 GNU/Linux、Mac OS X 和 Microsoft Windows。
  • setenv 适用于 GNU/Linux 和 Mac OS X,但不适用于 Microsoft Windows。
  • putenvgetenv 一样,可在 GNU/Linux、Mac OS X 和 Microsoft Windows 上使用。

因此getenvputenv 是您最好的跨平台选择。

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 2018-04-16
  • 2019-03-10
  • 2010-11-30
  • 1970-01-01
相关资源
最近更新 更多