Сравните строки, представленные как char ** - PullRequest
2 голосов
/ 11 декабря 2010
int main( int argc, char ** argv ) 
{
   if ( *argv[2] == *argv[3]) { ... }
   return true;
}

Это неправильно, не правда ли?!

Это не мой код, я нашел его, и, да, я понимаю, что мы должны проверить, что у нас более 2 аргументов ...

Ответы [ 5 ]

3 голосов
/ 11 декабря 2010

Для C ++ создайте std::string из каждого аргумента, а затем сравните, используя operator==.

Для C используйте strcmp.

Для обоих, проверьте argc >= 4, прежде чем делать эту проверку.

2 голосов
/ 11 декабря 2010

Попробуйте вместо этого:

#include <string>

int main( int argc, char  ** argv ) 
{
   if (argc >= 4 &&  std::string(argv[2]) == std::string(argv[3])) { ... }
   return 0;
}
1 голос
/ 11 декабря 2010

Да, это неправильно.

Вам нужно strcmp.

1 голос
/ 11 декабря 2010

Используйте strcmp, см. Здесь:

Вы можете использовать string класс для чистого C ++, если хотите, смотрите здесь:

0 голосов
/ 11 декабря 2010

Это совершенно корректный код, но он, вероятно, не выполняет то, что вы ожидаете.If condition будет истинным, если argv[2] и argv[3] начинаются с одной и той же буквы, поскольку вы сравниваете первый символ обеих строк.Если вы хотите сравнить целые строки, используйте strcmp.

И еще два совета: при работе с аргументами всегда проверяйте их количество (argc).При выходе из основного потока стандарт должен возвращать 0, если все в порядке.

...