2015-02-27 2 views
0

Как правильно работать с if утверждения в этом примере:LPWSTR сравнение

int n_args = 0; 
int i; 
LPWSTR *args = CommandLineToArgvW(GetCommandLineW(), &n_args); 
if (args) 
{ 
    if (n_args >= 2) 
    { 
     for (i = 1; i < n_args; i++) 
     { 
      std::cout << args[i] << "\n"; 
      if (args[i] == L"/D") // <-- here 
      { 
       std::cout << "Condition met\n"; 
      } 
     } 
    } 
} 

Первый std::cout показывает, что параметр командной строки был принят, но оператор, следующий if не удается.

+2

wcscmp() или аналогичный – rpress

+0

Кроме того, 'станд :: cout' не имеет' '<< оператор, который принимает' 'wchar_t * в качестве входных данных, так что этот код будет ссылаться на' '<< оператор, берет 'void *' как вход и, следовательно, распечатывает адрес памяти, который удерживает указатель, а не содержимое строки, на которое он указывает. Используйте 'std :: wcout' вместо этого, чтобы печатать широкие строки, или конвертировать' args [i] 'в Ansi перед тем, как напечатать его с помощью' std :: cout'. –

ответ

2
if (wcscmp(L"/D", args[i]) == 0) 
{ 

Вы пытаетесь сравнить два значения указателя. Вам нужно использовать strcmp или его широкую строку символов wcscmp. Эта функция возвращает 0, когда строки содержат один и тот же контент.

+0

У Win32 API есть собственные 'lstrcmpW()' и 'CompareStringW()'/'CompareStringEx()' функции (среди прочих), тогда как 'wcscmp()' из библиотеки времени выполнения C. Просто указывая, что существует несколько способов сравнения строковых значений с помощью указателей. –

Смежные вопросы