Wcsstr без учета регистра - PullRequest
3 голосов
/ 12 марта 2012

Кто-нибудь знает, как использовать wcsstr без учета регистра на C? Если это важно, я буду использовать его в драйвере ядра.

1 Ответ

5 голосов
/ 12 марта 2012

Если вы программируете под Windows, вы можете использовать функцию StrStrI().

Вы не можете использовать его в драйвере ядра, поэтому вам нужно написать его самостоятельно . В этом примере используется toupper(), и его следует заменить на RtlUpcaseUnicodeChar (как указано Rup). Подводя итог, вам нужно что-то вроде этого:

char *stristr(const wchar_t *String, const wchar_t *Pattern)
{
      wchar_t *pptr, *sptr, *start;

      for (start = (wchar_t *)String; *start != NUL; ++start)
      {
            while (((*start!=NUL) && (RtlUpcaseUnicodeChar(*start) 
                    != RtlUpcaseUnicodeChar(*Pattern))))
            {
                ++start;
            }

            if (NUL == *start)
                  return NULL;

            pptr = (wchar_t *)Pattern;
            sptr = (wchar_t *)start;

            while (RtlUpcaseUnicodeChar(*sptr) == RtlUpcaseUnicodeChar(*pptr))
            {
                  sptr++;
                  pptr++;

                  if (NUL == *pptr)
                        return (start);
            }
      }

      return NULL;
}
...