Charlower с GCC - PullRequest
       19

Charlower с GCC

0 голосов
/ 23 августа 2009

Я пытаюсь преобразовать следующий код из msvc в gcc

    #define ltolower(ch) CharLower((LPSTR)(UCHAR)(ch))
    char * aStr;
    * aStr = (char)ltolower(*aStr); 

Этот код выдаёт ошибку компилятора: приведение от 'CHAR *' к 'char' теряет точность

Насколько я понимаю, tolower (int) из c не преобразует всю строку. Спасибо.

1 Ответ

0 голосов
/ 23 августа 2009

Ваш каст в CharLower вызывает эту ошибку. Перед этим необходимо установить старший байт указателя, передаваемого в CharLower равно нулю.

Из ссылки MSDN на функцию:

Если операнд является символьной строкой, функция возвращает указатель на преобразованная строка Потому что строка конвертируется на месте, возврат значение равно lpsz.

Если операнд представляет собой один символ, возвращаемое значение является 32-битным значением чье старшее слово равно нулю, и младшее слово содержит преобразованный характер.

Примерно так может работать:

#define ltolower(ch) CharLower(0x00ff & ch)

Если вы используете компилятор C ++, вам также может понадобиться оператор CAST:

#define ltolower(ch) CharLower((LPTSTR)(0x00ff & ch))

Хотя не проверял ...

...