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

现在我有这个代码,但它总是设置为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总是空的吗?

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