我有一个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数组值。
答案 0 :(得分: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;
}
}
答案 1 :(得分: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;
}