1

我有一个 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 数组值进行比较。

4

2 回答 2

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;
 }
}
于 2013-07-10T05:51:26.720 回答
1

由于您指定了 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;
}
于 2013-07-10T08:15:06.090 回答