Важные детали просачиваются в комментариях. Это слишком плохо - детали должны появиться в вопросе. В частности, вы должны хотя бы показать строку кода, которая провела сравнение, и это привело к ошибке компилятора. И ошибка компилятора всегда должна быть расшифрована дословно.
Это означает, что вы используете либо wcscmp
, либо _tcscmp
для сравнения. Но вы проходите szBuf
, который представляет собой широкую строку для одного аргумента, а литерал - "hello"
для другого. Проблема в том, что szBuf
- это широкая строка, а буква - 8 бит, const char*
.
Я выдвигаю гипотезу, что вы написали код это так:
int cmp = _tcscmp(szBuf, "Hello");
И компилятор объекты, потому что вы определили UNICODE условны и поэтому _tcscmp
ожидает оба параметра быть типа const wchar_t*
. Литерала нет, это const char*
.
Так простое решение заключается в использовании широкого буквальным:
int cmp = _tcscmp(szBuf, _T("Hello"));
То есть, я бы не рекомендовал использовать TCHAR
в этот день и возраст. Я думаю, маловероятно, что вы по-прежнему ориентируетесь на Windows 98. Придерживайтесь обычного API Unicode Windows и используйте широкие строки. Объявите свои буферы, как это:
wchar_t szBuf[BUFF_LEN];
И сравните, как это:
int cmp = wcscmp(szBuf, L"Hello");
сделано таким образом, что это гораздо легче понять, что вы работаете с. Использование TCHAR
, если вы всегда компилируете с помощью UNICODE
, является бессмысленным упражнением, которое просто приводит к запутыванию кода.
Еще лучше, хотя следует избегать строк C как можно больше и использовать собственные строки C++. Например, std::wstring
был бы очевидным выбором здесь. Очевидно, вам нужно использовать строки C для низкоуровневых вызовов Windows API, но как только они вернут вам значение, перенесите это на строку C++, и жизнь будет намного проще.
Что вы делаете? Почему у вас есть объявление в коде? Пожалуйста, верните свой вопрос с действующим кодом. Теперь давайте рассмотрим вопрос с флагом. Также для сравнения строки используйте lstrcmp (i). – Xearinox
Почему вы используете 'TCHAR'. Использовать 'wchar_t' или' wstring' –
@DavidHeffernan thanx это хорошая идея. Я хочу проверить значение szBuf равно или не соответствует строке «привет». Можно ли сравнивать целую строку один раз или нужно использовать цикл для проверки каждого символа – user3012804