1

我正在尝试将应用程序从 Windows 移植到 linux。在 windows 中,我在 windows.h 中有一个GetEnvironmentStrings()函数,它以 NAME=VALUE 的形式为我提供当前进程中的环境变量及其值。对于 Linux,我使用这样的环境变量

for (char **en=environ; *en; en++)   {
    std::string str(*en)
    env.push_back(str);      //env is a vector of strings
}

该应用程序似乎仍然无法正常工作。在 Windows 中,当我打印传递给 env 向量(字符串向量)的字符串大小时,它会将所有字符串的大小打印为 48 个字节。而在 Linux 上大小为 8。原始应用程序使用 Unicode 版本 ( GetEnvironmentStringsW) 并使用转换函数将返回的宽字符串转换为 8 位字符串WideCharToMultiByte

我对字符编码没有足够的知识,但我想这与字符串的编码方式有关。知道可能出了什么问题吗?

4

2 回答 2

0

在 Windows 上,每个环境变量的大小都相同,这一事实非常可疑。我怀疑您没有正确打印尺寸,这与任何编码无关。

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> env;
    for (char **en=environ; *en; en++)   {
        std::string str(*en);
        std::cout << str.size() << '\n';
        env.push_back(str);
    }
}

http://ideone.com/If9ut

18
33
16
16
17
7
于 2012-07-25T15:55:56.787 回答
0

这似乎是相关的:

Linux:环境变量存储在哪里?

为了给现有的环境变量设置一个值,我们使用赋值表达式。例如,要将“LANG”变量的值设置为“he_IL.UTF-8”,我们使用以下命令:

LANG=he_IL.UTF-8

https://help.ubuntu.com/community/EnvironmentVariables

或者,您可以执行终端命令以使用system()获取环境变量。该页面会告诉您要包​​含哪些库以及正确的使用信息。

于 2012-07-25T14:41:24.517 回答