2013-07-10 3 views
0

У меня есть один массив WCHAR, как этоКак получить подстроку из 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.

ответ

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

Поскольку вы указали 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; 
}