Es sieht so aus, als ob Sie einen Code haben, der einmal Multibyte und UNICODE unterstützt hat, aber nach mehrmaligem Kompilieren nicht mehr kompiliert wurde (keine Unterstützung von Windows 95 mehr).
Dieser Codeausschnitt macht nur Sinn, wenn Sie _UNICODE
definiert haben. In diesem Fall wird es so nach dem Pre-Prozessor Ende:
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);
In diesem Fall wird die GetCurrentDirectoryW
gibt eine UINCODE (wide string) in Curr_dir
und es umgewandelt, aus irgendeinem welchem Grunde auch immer, zu einem Multi-Byte-String. Und die Typen der Zeichen stimmen überein.
Aber wenn _UNICODE
ist nicht es die Code-Änderungen an den folgenden definiert:
char Curr_dir[100];
char* input_file;
unsigned long a = GetCurrentDirectoryA(100, Curr_dir);
size_t i= wcstombs(&input_file[i], Curr_dir, 100);
Und GetCurrentDirectoryA
schaltet nun auf die ANSI version of the API es keinen Sinn wcstombs
mehr zu nennen macht.
Normalerweise sind die MDSN Dokumentation hat einen Abschnitt mit einer Tabelle mit allen Versionen einer String-Funktion unter generic-Text Routine Mappings (zB strcmp-wcscmp-mbscmp
) Es gibt keine ‚_t‘ -Version der wcstombs
so müssen Sie #ifdef _UNICODE
verwenden .
Aber auch wenn die Multi-Byte-Version der Win32-API noch unterstützt wird, macht es keinen Sinn, sie weiterhin zu verwenden.
Mehr: https://www.codeproject.com/articles/76252/what-are-tchar-wchar-lpstr-lpwstr-lpctstr-etc
Mögliche Duplikat [Fehler TCHAR verwenden, können nicht konvertieren WCHAR \ 't] (https://stackoverflow.com/questions/21257851/errors-using-tchar-cannot-convert-to- wchar-t) - auch das scheint eine C-Frage zu sein. – kabanus
@kabanus Obwohl die Win32-API eine C-API ist, ist sie auch für C++ vorbereitet/verwendet. Der Fragesteller schreibt wahrscheinlich ein C++ - Programm. Also lass ihn diesmal gehen ... (Übrigens danke für den Link - ich "mochte" die angenommene Antwort.) – Scheff