Проверьте, содержит ли строка другой C - PullRequest
0 голосов
/ 11 марта 2012

Теперь у меня есть этот код, но он всегда равен нулю

UNICODE_STRING str;
char *cmp = "Hello";

RtlInitUnicodeString (&str, L"Hello world!");

if( ( strstr((char * )str.Buffer, cmp) ) != NULL)
{
   // cmp founded in str.
}
else
{
   // cmp not founded in str. Always here, but why??
}

Можете ли вы объяснить, почему strstr в моем случае всегда равен нулю?

1 Ответ

0 голосов
/ 11 марта 2012

Вы ищете многобайтовую строку в Unicode.Используйте wcsstr:

wchar * cmp = L"Hello";
wcsstr(str.Buffer, cmp);

Вы скрывали это, передавая char *.


Вам действительно нужно задать еще один вопрос для второго запроса, но вы можете написатьфункция как это:

void make_string_lower(WCHAR * str)
{
  while(str[0] != '\0') {
    if(iswalpha(str[0] && !iswlower(str[0]))) {
      str[0] = towlower(str[0]);
    }

    str++;
  }
}

В качестве альтернативы используйте _wcslwr.

...