マルチバイトと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
可能性のある重複した[TCHARを使用してエラーは、\ _t WCHARに変換することはできません]を(https://stackoverflow.com/questions/21257851/errors-using-tchar-cannot-convert-to- wchar-t) - これはCのようなものです。 – kabanus
@kabanus Win32 APIは、C++でも用意されているC APIです。質問者はおそらくC++プログラムを書いています。だから、今度は彼に行かせてください...(Btw。リンクありがとう - 私は受け入れられた答えを「好き」でした) – Scheff