abbiamo bisogno di passare un * stringa di formato _TCHAR, e un certo numero di char * stringhe in una funzione con argomenti a lunghezza variabile:Come si converte da _TCHAR * a char * quando si usano gli argomenti di lunghezza variabile C++?
inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
//...
}
Così può essere definito in questo modo:
char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Ovviamente una soluzione semplice sarebbe usare _TCHAR invece di char, ma purtroppo non abbiamo quel lusso.
Abbiamo bisogno di usare questo con va_start, ecc in modo che possiamo formattare una stringa:
va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];
va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Purtroppo non possiamo usare questo perché ci dà questo errore:
Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
sto pensando dobbiamo convertire il nostro char * in _TCHAR * - ma come?
se avete il lusso di usare un wchar * invece di un char *, penso che sarebbe risolvere si problema –
Hmm, purtroppo non - il sistema attuale è un miscuglio di char * e _TCHAR * –
questo è un peccato ... l'efficienza è un problema? in caso contrario, dai un'occhiata alla mia risposta, ha funzionato per me –