2012-03-12 2 views
3

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

+0

Какая часть ядра должна отвечать на вызов этой функции библиотеки? –

+0

Есть [некоторые] (http://www.daniweb.com/software-development/c/code/216564) [примеры] (http://www.codeguru.com/cpp/cpp/string/article.php/c5641) при правильном поиске. Хотя я не нашел никакого использования 'whcar_t', его не должно быть сложно модифицировать для его поддержки. –

ответ

4

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

Вы не можете использовать его в драйвере ядра, поэтому у вас должно быть write it by your own. В этом примере используется 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; 
} 
+0

['StrStrI'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb773439.aspx) находится в shlwapi, который не будет доступен для драйвера ядра. Но да, ваш собственный код, вероятно, способ сделать, хотя я подозреваю, что «toupper» также не будет доступен здесь. – Rup

+0

На самом деле я беру это обратно - есть ['RtlUpcaseUnicodeChar'] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff563003.aspx) – Rup

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