Хорошо, я пытаюсь убедить аргументы в правильной работе небольшого тестового приложения. Мой код ниже. У меня не слишком большой опыт работы с C++, поэтому я не уверен, почему, когда я запускаю тест с -print (или --print), он автоматически сообщает «Недопустимый вариант», а затем завершается.
#include <iostream>
int main(int argc, char* argv[])
{
int option;
option = 1;
char* argument;
argument = argv[option];
while (option < argc)
{
if (argument == "-print")
{
std::cout << "Printing Extra Text";
}
else
{
std::cout << "Not a valid option" << std::endl;
}
option++;
}
std::cout << "Printing normal text" << std::endl;
return 0;
}
Я правильно это делаю? Заранее спасибо.





Вы сравниваете адрес памяти строки «-print» с адресом памяти argument. Это не сработает! Используйте strcmp() для сравнения строковых значений. Вместо:
if (argument == "-print")
делать
if (strcmp(argument, "-print") == 0)
if (argument == "-print")
вы не можете сравнивать такие строки!
Используйте strcmp () для сравнения строк.
Ошибка в следующей строке:
if (argument == "-print")
Здесь вы сравниваете указатели, а не строковые значения. Заменить:
if (strcmp(argument, "-print") == 0)
C / C++ ведет себя иначе, чем Java или C#, в отношении обработки строк. Строки - это не собственный тип или объект, а просто прославленные указатели на массивы символов.
В качестве альтернативы, и если ваш список опций становится более сложным, рассмотрите возможность использования специальной библиотеки анализа опций, такой как Program_optionsУвеличение. Он будет обрабатывать все аспекты, включая проверку и пользовательские сообщения.
Я давно программировал на C++, но не стоит ли просто использовать
std::string argument;
и тогда сравнение с == будет работать?
В вашем вопросе указано, что вы также хотите проверить --print (два тире), но ваш код не проверяет это.
Кроме того, вы назначаете аргумент вне цикла, вы захотите сделать это внутри цикла, иначе вы будете проверять только аргумент № 1 каждый раз вокруг цикла.
Когда читаешь аргумент, возникает еще одна проблема. (со всеми необходимыми изменениями)
int main(int argc, char* argv[])
{
int option;
option = 1;
char* argument;
while (option < argc)
{
argument = argv[option];
if (strcmp(argument, "-print") == 0)
{
std::cout << "Printing Extra Text";
}
else
{
std::cout << "Not a valid option" << std::endl;
}
option++;
}
std::cout << "Printing normal text" << std::endl;
return 0;
}