2017-11-19 4 views
0

Ich habe einen Code von Collegaue, der vor einer Weile geschrieben wurde, und ist verwirrend. Der Code ist:Verwenden von GetCurrentDirectory mit wcstombs

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

Das Problem ist, dass Curr_dir nicht der Typ ist, der zu wcstombs benötigt. Gibt es noch andere Funktionen, die tun können, was wcstombs mit dieser Art von Variable macht? Oder eine Möglichkeit, es zu konvertieren?

+0

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

+0

@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

Antwort

0

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