опция командной строки

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (argv[1]=="-r") cout << "success\n";
}

«успех» не распечатывается. Когда я бегу: $ ./hearts -r
единственное, что выходит:

что меня так смущает

1

Решение

Вы должны попробовать использовать:

if (strcmp(argv[1],"-r")==0) cout << "success\n";

сравнить аргумент со строковым литералом.

1

Другие решения

Я собираюсь пойти дальше и сказать вам, что вы не хотите strcmp, Способ обработки аргументов командной строки в C ++ — превратить их в std::strings как можно скорее:

int main(int argc, const char* argv[])
{
// Make a vector of all command-line arguments
std::vector<std::string> args(argv, argv+argc);
// Now we can use std::string's operator==
if (args.size() > 1 && args[1] == "-r") {
std::cout << "Success" << std::endl;
}
return 0;
}

Вы можете сравнить два std::stringс == оператор. В случае args[1] == "-r", const char[] строковый литерал преобразуется в std::string для сравнения. В вашем коде argv[1]=="-r" сравнивает два независимых указателя, которые не будут равны — он не сравнивает содержимое строк в стиле C.

3

Это потому, что вы используете == на двух указателях. Он проверит, равны ли указатели, а не совпадают ли точки на тех же данных.

Чтобы сравнить две строки C, используйте strcmp как это:

if (strcmp(argv[1], "-r") == 0)
2

Вы, вероятно, хотите strcmp сравнить две строки. За == чтобы быть правдой, ваши две строки должны ссылаться на одну и ту же область памяти, что не может произойти, так как "-r" является константой времени компиляции.

1

Вы должны использовать strcmp() и это будет работать как положено. Когда вы используете == Вы сравниваете указатели, и они не могут быть одинаковыми.

1

В Си строка — это символьные массивы (указатели на последовательность символов). В вашем коде оператор равенства сравнивает только два значения указателя, которые абсолютно разные. Вы должны использовать strcmp функция или использование string учебный класс:

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <cstring> // <-- here

using namespace std;

int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (strcmp(argv[1], "-r") == 0) // <-- and here
cout << "success\n";
}

ИЛИ ЖЕ

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <string> // <-- here

using namespace std;

int main(int argc, char* argv[])
{
cout << argv[1] << endl;
if (string(argv[1]) == "-r") // <-- and here
cout << "success\n";
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector