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.

È stato utile?

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ò ...

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