【发布时间】: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。 -
getenv和setenv有什么问题? -
我赞同@DarkFalcon 的评论。长度似乎真的不是问题。只需获取其(参数的)长度,使用它为变量分配空间,然后将参数复制到分配的变量。
标签: c++ c cross-platform environment-variables