Domanda
Sto cercando di convertire il codice riportato di seguito da msvc a GCC
#define ltolower(ch) CharLower((LPSTR)(UCHAR)(ch)) char * aStr; * aStr = (char)ltolower(*aStr);
Questo codice sta dando un errore di compilazione: cast ‘CHAR *’ a ‘char’ perde precisione
La mia comprensione è che tolower (int) da C non sarebbe convertire l'intera stringa. Grazie.
Soluzione
Il cast CharLower sta sollevando tale errore. Prima di fare questo, è necessario impostare il byte alto ordine del puntatore passato a CharLower è uguale a zero.
Da riferimento MSDN sulla funzione:
Se l'operando è una stringa di caratteri, la funzione restituisce un puntatore al stringa convertita. Perché la stringa viene convertito in luogo, il ritorno il valore è pari a lpsz.
Se l'operando è un singolo carattere, il valore di ritorno è un valore a 32 bit cui la parola di ordine superiore è zero, e parola di ordine inferiore contiene la convertita carattere.
Qualcosa di simile potrebbe funzionare:
#define ltolower(ch) CharLower(0x00ff & ch)
Se si utilizza un compilatore C ++, potrebbe anche essere necessario un operatore di CAST:
#define ltolower(ch) CharLower((LPTSTR)(0x00ff & ch))
Non ho ancora testato, però ...