Есть ли способ сохранить "char * argv []" в переменную в C ++? - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы иметь возможность сохранить argv в структуру, чтобы она могла быть передана следующим функциям:

struct Parameters {
    int argc;
    char * argv[];
};

void Start(
    Parameters P
) {

};

int main (
    int argc,
    char * argv []
) {
    Parameters P;
    P.argc = argc;
    P.argv = & argv;


    return 0;
}

Но с:

clang++ -std=c++2a -stdlib=libc++ -rtlib=compiler-rt -Ofast Start.cpp -o Start && ./Start;

I ' получаю эту ошибку:

Start.cpp:21:9: error: array type 'char *[]' is not assignable

Есть ли способ сохранить argv в переменную? Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Простой способ - преобразовать его в вектор строк:

int main(int argc, char* argv[])
{
    // Note: use argv + 1 to skip the application name in args.
    //       If you want to include the application name then don't use
    //       the +1
    std::vector<std::string>    args(argv + 1, argv + argc);

    // Now this can be passed to functions easily.
    // args.size()  == number of arguments.
    // args[x] == the string for argument x

}
0 голосов
/ 02 апреля 2020

Вы можете просто изменить на:

struct Parameters  
{
    int argc;
    char ** argv;
};

Ваш массив argv указателей на char затухнет до указателя на указатель на char.

Тогда ваш main становится проще, с:

P.argv = argv;
...