Domanda

Ho un programma in cui ho bisogno di utilizzare il formato (); funzione per unire un letterale stringa e un int in una variabile CString. Ho provato diversi modi di fare questo, il codice per loro è qui:

// declare variables used
CString _CString;
int _int;

// try to use format function with string literal
_CString.Format("text",_int); 

// try to use format function with C-Style cast
_CString.Format((wchar_t)"text",_int);

// try to use format function with static_cast 
_CString.Format(static_cast<wchar_t>("text"),_int);

Il primo restituisce uno errore C2664: 'ATL vuoto :: CStringT :: Format (const wchar_t *, ...)': non può convertire il parametro 1 da 'const char [33]' a 'const wchar_t *'

Per il secondo, non v'è alcun errore, ma il testo viene visualizzato in caratteri cinesi.

La terza restituisce uno errore C2440: 'static_cast': non può convertire da 'const char [33]' a 'wchar_t'

Tutte le idee per la conversione CStrings a wchar_t * s?
Grazie

È stato utile?

Soluzione

Il problema è che si sta eseguendo una build Unicode (che va bene), in modo che il

_CString.Format(); 

funzione i aspettandosi il primo parametro da una stringa di caratteri di larghezza. È necessario utilizzare la sintassi L"" per formare un ampio caratteri stringa letterale:

_CString.Format(L"text",_int); 

Naturalmente, avrete bisogno di un identificatore per effettivamente ottenere la variabile int formattato nel CString:

_CString.Format(L"text: %d",_int); 

Se si include l'intestazione tchar.h, è possibile utilizzare le macro di Microsoft per rendere la stringa letterale di caratteri estesi o regular-vecchio caratteri (altrimenti noto come ANSI) a seconda se si sta costruendo UNICODE o no:

_CString.Format(_T("text: %d)",_int); 

, ma direi che se non hai intenzione di roba eredità supporto che ti richiedono il supporto ANSI, probabilmente non perdere tempo con la roba tchar.h.

Altri suggerimenti

Beh, non è del tutto chiaro che tipo stringa che come target, ma ecco quello che avrei fatto:

_CString.Format(_T("%d"), _int);

Il tentativo di cast di tipo una stringa multi-byte in una stringa Unicode può compilare, ma è in cerca di guai, perché è ancora una stringa multi-byte. Avrai bisogno di convertire l'intera stringa e non solo typecast, se questo è ciò che si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top