Возможный дубликат:
C String — Использование оператора равенства == для сравнения двух строк на равенство
Основной вопрос здесь. Я компилирую эту программу в g ++ и запускаю ее с одним аргументом -r (./a.out -r), однако она не выводит указанный оператор cout ниже. Что-то не так с этим кодом?
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
if (argv[1] == "-r" ) {
cout << "First arg is -r" << endl;
}
return 0;
}
Вы не можете сравнивать строковые литералы, используя ==
потому что то, что это делает, это сравнить указатели (то есть адреса памяти, которые в этом случае всегда будут разными).
использование strcmp
или сравнить std::string
объекты вместо:
if (strcmp(argv[1], "-r") == 0) { ... }
или же
if (std::string(argv[1]) == "-r") { ... }
Вы не можете сравнивать строковые литералы с ==. Используйте strcmp.
(Также не забудьте проверить, что argc не меньше 2).
Одна ошибка в вашем коде — вы сравниваете адрес массива char вместо сравнения значений в массиве. Как люди говорили, вы можете сделать это C
способ использования strcmp
(хотя безопаснее использовать strncmp
чтобы избежать переполнения буфера).
Тем не менее, это проще в использовании std::string
в C ++.
Я бы скопировал аргументы в вектор строк.
#include <vector>
#include <string>
int main(int argc, char* argv[])
{
vector<string> args(argv, argv+argc);
...
Обычно вы делаете что-то вроде этого:
while (--argc && **++argv=='-')
{
char *p;
p=*argv+1;
switch(tolower(*p))
{
case 'r':
break;
}
}
в основном, пока остаются некоторые аргументы, проверьте, есть ли символ ‘-‘, затем включите следующий символ, чтобы увидеть модификатор (‘r’ или ‘a’ и т. д.)