2013-12-12 3 views
-1

У меня есть 2 edit control в диалоговом окне. И onclick кнопки Ok Я хочу сравнить это значение со строкой., сравнивая значение управления редактированием со строкой

case IDC_BUTTON1: 
     UINT WINAPI GetDlgItemText(
    _In_ HWND hDlg, 
    _In_ int nIDDlgItem, 
    _Out_ LPTSTR lpString, 
    _In_ int nMaxCount 
); 

TCHAR szBuf[BUFF_LEN]; 
TCHAR szBuf1[BUFF_LEN]; 
GetDlgItemText(hDlg, IDC_EDIT1, szBuf, BUFF_LEN - 1); 
GetDlgItemText(hDlg,IDC_EDIT2,szBuf1,BUFF_LEN-1); 

теперь после этого, если условие проверки значения szBuf и szBuf1, но сказать не может преобразовать cont char в tchar как преобразовать это значение.

+0

Что вы делаете? Почему у вас есть объявление в коде? Пожалуйста, верните свой вопрос с действующим кодом. Теперь давайте рассмотрим вопрос с флагом. Также для сравнения строки используйте lstrcmp (i). – Xearinox

+0

Почему вы используете 'TCHAR'. Использовать 'wchar_t' или' wstring' –

+0

@DavidHeffernan thanx это хорошая идея. Я хочу проверить значение szBuf равно или не соответствует строке «привет». Можно ли сравнивать целую строку один раз или нужно использовать цикл для проверки каждого символа – user3012804

ответ

1

Важные детали просачиваются в комментариях. Это слишком плохо - детали должны появиться в вопросе. В частности, вы должны хотя бы показать строку кода, которая провела сравнение, и это привело к ошибке компилятора. И ошибка компилятора всегда должна быть расшифрована дословно.

Это означает, что вы используете либо 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++, и жизнь будет намного проще.

+0

wcscmp (szBuf, L "Hello") дают правильный ответ, но если мы будем хранить привет в wchar_t temp = L "hello", а теперь сравним с помощью wcscmp (szBuf, temp) он дает ответ 0 в чем проблема – user3012804

+0

Ну, первая строка - ** Hello **, а вторая строка - ** hello **. Обратите внимание на отсутствие заглавной буквы во втором. –

+0

он даже не работает для Hello. – user3012804

Смежные вопросы