0

現在使用されているロケールとは異なるロケールにある Windows 7 の現在のディレクトリを読み取る必要があります。そこで、wchar_t* とのユニコード互換性があるため、GetCurrentDirectoryW() を使用することを考えました。ただし、既存の API を使用する必要があるため、これを char* に変換する必要があります。この目的のために、wcstombs() 関数を使用しました。ただし、変換が正しく行われていません。以下に含まれているのは、私が使用したコードです。

    wchar_t w_currentDir[MAX_PATH + 100];
    char currentDir[MAX_PATH + 100];
    GetCurrentDirectoryW(MAX_PATH, w_currentDir);
    wcstombs (currentDir, w_currentDir, MAX_PATH + 100);
    printf("%s \n", currentDir);

私がいる現在のディレクトリは、C:\特斯塔敌人です。変換が完了すると、フルパスの 'C:\' の部分だけが正しく char* に変換されます。他の文字はそうではなく、ジャンク値です。私が使用しているこのアプローチの問題は何ですか? どうすればこれを修正できますか?

ありがとうございました!

4

1 に答える 1

1

問題は、適切な変換ができないことです。ワイド文字には、通常の char に相当するものがない場合があります(これが、wcharそもそも存在する理由です。したがって、次を使用する必要がありますwprintf

GetCurrentDirectoryW(MAX_PATH, w_currentDir);
wprintf("%s \n", w_currentDir);
于 2012-11-19T04:40:45.677 に答える