2017-11-19 6 views
0

私は以前に書かれた、collegaueからのコードを得て、混乱します。 コードは次のとおりです。wcstombsでGetCurrentDirectoryを使用

TCHAR Curr_dir[100]; 
char* input_file; 
DWORD a = GetCurrentDirectory(100, Curr_dir); 
size_t i= wcstombs(&input_file[i], Curr_dir, 100); 

問題はCurr_dirwcstombsに必要なタイプではないということです。 このタイプの変数でwcstombsが実行できる機能は他にありますか? それを変換する方法ですか?

+0

可能性のある重複した[TCHARを使用してエラーは、\ _t WCHARに変換することはできません]を(https://stackoverflow.com/questions/21257851/errors-using-tchar-cannot-convert-to- wchar-t) - これはCのようなものです。 – kabanus

+0

@kabanus Win32 APIは、C++でも用意されているC APIです。質問者はおそらくC++プログラムを書いています。だから、今度は彼に行かせてください...(Btw。リンクありがとう - 私は受け入れられた答えを「好き」でした) – Scheff

答えて

0

マルチバイトとUNICODEをサポートしていたが、マルチバイト(コンパイルされていないWindows 95はサポートしていません)のコンパイルが中断された後にコードが壊れているようです。

このコードは、_UNICODEが定義されている場合にのみ意味を持ちます。この場合には、前処理した後、次のように終了します。この場合GetCurrentDirectoryW

wchar_t Curr_dir[100]; 
char* input_file; 
unsigned long a = GetCurrentDirectoryW(100, Curr_dir); 
size_t i= wcstombs(&input_file[i], Curr_dir, 100); 

Curr_dirにUINCODE(ワイド文字列)を返し、それはマルチバイト文字列に、いくつかの理由を問わず、変換されます。そして、文字の種類が一致します。

しかし_UNICODEないはそれを次のようにコードの変更を定義している場合:

char Curr_dir[100]; 
char* input_file; 
unsigned long a = GetCurrentDirectoryA(100, Curr_dir); 
size_t i= wcstombs(&input_file[i], Curr_dir, 100); 

そしてGetCurrentDirectoryA今ではもうwcstombsを呼び出すためにも意味がありませんANSI version of the APIに切り替わります。

通常MDSNのドキュメントは、(例えば、strcmp-wcscmp-mbscmp用)ジェネリックテキストルーチンのマップ下の文字列関数のすべてのバージョンとテーブルのセクションを持っているwcstombsのない「_t」バージョンはありませんので、あなたは#ifdef _UNICODEを使用する必要があります。

しかし、Win32 APIのマルチバイト版がまだサポートされている場合でも、それらを使用し続けることは意味がありません。

詳細:のhttps://www.codeproject.com/articles/76252/what-are-tchar-wchar-lpstr-lpwstr-lpctstr-etc

関連する問題