检查字符串是否包含另一个C.

时间:2012-03-11 15:27:51

标签: c string winapi unicode-string

现在我有了这段代码,但它始终设置为null

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 :(得分:0)

您正在搜索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