如何检查CComBSTR是否以某个前缀开头?

Sha*_*ark 3 string atl bstr visual-c++

我遇到了一段代码,我只需要对给定的CComBSTR对象进行前缀检查(类似Y.StartsWith("X")).C++对我来说有点陌生,我最关心的是效率.我不需要以任何方式修改CComBSTR.我想要的是返回一个布尔值,它是否以X前缀开头.

查看CComBSTR成员下的API中列出的运算符,它允许进行非常基本的比较,如==,>,<等.我有两个关于如何尝试解决此问题的想法(如下所示).但是,我没有深入了解什么是最有效/最简单的方法.如果我完全偏离基地,请告诉我.

  1. 使用BSRTToArray创建一个数组,然后迭代前n个索引以检查它是否具有某个前缀.
  2. 从CComBSTR获取BSTR并在BSTR上进行一些比较(还没有弄清楚如何做到这一点)

Rom*_* R. 7

wcsncmp 将为您比较有限数量的起始字符:

BOOL StartsWith(BSTR sValue, const WCHAR* pszSubValue)
{
    if(!sValue)
        return FALSE;
    return wcsncmp(sValue, pszSubValue, wcslen(pszSubValue)) == 0;
}
Run Code Online (Sandbox Code Playgroud)

  • `WCHAR*`与`BSTR`直接兼容,你可以同时提供`wcs*`函数的参数.请注意,null`BSTR`仍然是一个有效值,而它不是`wcs*`函数的有效参数. (2认同)