1

アプリケーションを Windows から Linux に移植しようとしています。Windows ではGetEnvironmentStrings()、windows.h に関数があり、現在のプロセスの環境変数とその値を 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 に答える