【问题标题】:How to get substring from WCHAR array如何从 WCHAR 数组中获取子字符串
【发布时间】:2013-07-07 22:25:32
【问题描述】:

我有一个WCHAR数组是这样的

WCHAR Path[256];

所以我在我的函数getpath(Path) 中传递了这个数组,它正在像这样填充路径中的值:

//device/systemName/

所以我只想从上面的字符串中获取设备。

我的代码在这里:

   WCHAR *pDevName;

   int i = 0;
   int j = 0;

   while(Path[i] != NULL){ 
     if(0 ==(wcscmp(Path, L"/")))
     {

        //i = i + 2;
         ++i;
        continue;
    }

    else
    {
        pDevName[j] = Path[i];

        ++i;
        ++j;
        if (0 == wcscmp(Path, L"/")){
            break;
        }
    }

我的代码正在编译,但它没有从 WCHAR 数组为我返回设备。它正在返回//devicename/systemName/,它来自pDevName

我对我对wcscmp() 的比较持怀疑态度。所以我的问题是如何将 / 与剩余的 wchar 数组值进行比较。

【问题讨论】:

    标签: c++ string winapi wchar-t


    【解决方案1】:

    wcscmp 比较的是一个字符串,而不是一个字符。您还每次都将相同的地址传递给wcscmp - Path,这意味着您所做的只是将整个字符串与“/”进行比较,这将始终失败。

    如果要测试单个字符,可以直接比较它的值,例如:

    WCHAR *pDevName;
    // NB: I assume you are allocating pDevName and just left that out of the code
    // for brevity.
    int i = 0;
    int j = 0;
    
    while(Path[i] != L'\0'){ 
     if(Path[i] == L'/')
     {
         ++i;
        continue;
     }
     else
     {
        // NB: you should check for overflow of pDevName here
        pDevName[j++] = Path[i++];
        if (Path[i] == L'/')
            break;
     }
    }
    

    【讨论】:

      【解决方案2】:

      由于您指定了 c++,因此执行以下操作会更容易:

      #include <string>
      
      using namespace std;
      
      wstring get_device_name(const wchar_t* path) 
      {
          wstring source(path);
          wstring device_name;
      
          if (source.substr(0, 2)==L"//") 
          {
              size_t position= source.find(L'/', 2);
      
              if (position==wstring::npos) 
                  device_name= source.substr(2);
              else
                  device_name= source.substr(2, position-2);
          }
      
          return device_name;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 2015-03-26
        • 1970-01-01
        • 2018-02-22
        • 2020-12-03
        • 2011-11-30
        • 1970-01-01
        相关资源
        最近更新 更多