Назначение аргументов командной строки для функций

Допустим, я хотел открыть функцию (она открывает файл, что-то с ним делает, а затем выплевывает результаты в другой файл). Используя argv и argc и просматривая все учебники в Интернете, я предполагаю, что если я напечатаю argv [0], я получу имя файла.
Мой вопрос: как мне установить, скажем, следующий argv [1.2.n] для функции. Таким образом, если пользователь введет open (после того, как пользователь окажется в каталоге программы), он откроет эту функцию.
Что-то вроде:

  void file();

  if (argv[1] == open){
file();
}

0

Решение

argv имеет тип char*[] (массив указателей типа char *). Вы не можете напрямую сравнивать строковые константы (тип char*), который нужно процитировать. Вместо этого я предлагаю вам преобразовать его в строковый тип c ++:

#include <string>

void file(){
// ...
}

int main(int argc, char *argv[]) {
if(argc>=2)
{
if(std::string(argv[1]) == "open")
{
file();
}

}
else
{
// print usage
}
}
0

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

Первая строка в argv не является первым аргументом командной строки, обычно это путь к exe. Я рекомендую поместить аргументы командной строки в простую структуру данных.

vector<string> args(argv, argv + argc);

Теперь вы можете передать вектор своим функциям.

1

Передайте параметры вашей функции:

void file(int * argc, char * * argv)
{
//
}

int main(int argc, char * * argv)
{
if (argv[1] == open)
{
file(argc, argv);
}
return 0;
}
0

Не совсем понятно, о чем ты спрашиваешь. Если целью является
вызывать разные функции в зависимости от одного из аргументов,
Обычное решение состоит в том, чтобы использовать карту строк для указателей на
функции, а затем сделать что-то вроде:

MapType::const_iterator entry = map.find( argv[1] );
if ( entry == map.end() ) {
std::cerr << "Unknown function " << argv[1] << std::endl;
returnCode = 1;
} else {
(*entry->second)();
}
0