int main( int argc, char ** argv )
{
if ( *argv[2] == *argv[3]) { ... }
return true;
}
Это неправильно, не так ли?!
Это не мой код, я его нашел, и, да, я понимаю, что мы должны проверить, что у нас больше двух аргументов...
int main( int argc, char ** argv )
{
if ( *argv[2] == *argv[3]) { ... }
return true;
}
Это неправильно, не так ли?!
Это не мой код, я его нашел, и, да, я понимаю, что мы должны проверить, что у нас больше двух аргументов...
Для C++ создайте std::string
из каждого аргумента, а затем сравните, используя operator==
.
Для C используйте strcmp
.
Для обоих проверьте argc >= 4
перед выполнением этой проверки.
const char*
в руке. strcmp
является частью среды выполнения C - в C++ стандартная библиотека предоставляет std::string
, чтобы облегчить боль и избежать распространенных ошибок, таких как переполнение буфера, забывание освободить память.
- person Steve Townsend; 11.12.2010
Попробуйте это вместо этого:
#include <string>
int main( int argc, char ** argv )
{
if (argc >= 4 && std::string(argv[2]) == std::string(argv[3])) { ... }
return 0;
}
Используйте strcmp
, см. здесь:
Вы можете использовать класс string
для чистого С++, если хотите, см. здесь:
Да, это неправильно.
Вам нужно strcmp
.
Это совершенно правильный код, но он, вероятно, не делает того, что вы ожидаете. If condition
будет истинным, если argv[2]
и argv[3]
начинаются с одной и той же буквы, потому что вы сравниваете первый символ обеих строк. Если вы хотите сравнить целые строки, используйте strcmp
.
И еще 2 совета: Когда имеешь дело с аргументами, всегда проверяй их количество (argc). Когда вы выходите из основного потока, стандарт возвращает 0, если все в порядке.