2012-07-25 48 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