2012-07-25 182 views
1

我试图将应用程序从Windows移植到Linux。 在Windows中,我在windows.h中有一个GetEnvironmentStrings()函数,它以NAME = VALUE的形式为我提供了当前进程中的环境变量及其值。 对于Linux我使用ENVIRON变量这样在Linux中获取环境变量作为UTF-8字符串

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)和 使用转换函数WideCharToMultiByte将返回的宽字符串转换为8位字符串。

我没有足够的知识abt字符编码,但我想它与字符串编码的方式有关。 任何想法可能会出错?

+0

你正在寻找的getenv(3)和SETENV(3)(http://linux.die.net/man/3/getenv)? – fork0 2012-07-25 14:48:03

+0

究竟哪些不起作用? – fork0 2012-07-25 14:48:57

+0

你的代码看起来很好。 http://ideone.com/jUF5k 你是如何打印字符串的大小? – Roddy 2012-07-25 14:49:25

回答

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