Как инициализировать массив argv в C



Я пытаюсь инициализировать * argv с помощью следующих значений: test_file model result
Кто-нибудь может помочь мне, как непосредственно инициализировать argv вместо использования командной строки. Я делаю это так:



*argv[]= {"test_file","model","output",NULL};


Но это не работает. Я знаю, что это просто, но я новичок в программировании. Кто-нибудь может мне помочь?

420   3  
c

3 ответов:

char* dummy_args[] = { "dummyname", "arg1", "arg2 with spaces", "arg3", NULL };

int main( int argc, char** argv)
{
    argv = dummy_args;
    argc = sizeof(dummy_args)/sizeof(dummy_args[0]) - 1;

    // etc...

    return 0;
}
Следует помнить, что стандартные строки argv могут быть изменены. Эти замещающие не могут быть (они литералы). Если вам нужна эта возможность (которая может быть у многих парсеров вариантов), вам понадобится что-то немного умнее. Может быть, что-то вроде:
int new_argv( char*** pargv, char** new_args) 
{
    int i = 0;
    int new_argc = 0;
    char** tmp = new_args;

    while (*tmp) {
        ++new_argc;
        ++tmp;
    }

    tmp = malloc( sizeof(char*) * (new_argc + 1));
    // if (!tmp) error_fail();

    for (i = 0; i < new_argc; ++i) {
        tmp[i] = strdup(new_args[i]);
    }
    tmp[i] = NULL;

    *pargv = tmp;

    return new_argc;
}      

Это называется так:

argc = new_argv( &argv, dummy_args);

Или проще говоря, работает ли это (извините, что опоздал на 3 года;))?

int argc ;
char * argv[3] ;

char  p1[16]  ;
char  p2[16]  ;
char  p3[16]  ;

memcpy ( p1, "mainwindow", 9 ) ;
memcpy ( p2, "–SizeHint5", 10 ) ;
memcpy ( p3, "120x240", 7 )  ;

argc = 3 ;
argv[0] = p1 ;
argv[1] = p2 ;
argv[2] = p3 ;

QApplication app(argc, argv);

Такая инициализация доступна только во время объявления, и (предположительно) вы объявили argv в качестве параметра своей функции (main я предполагаю). В этом случае вам придется назначить каждого по отдельности.

Comments

    Ничего не найдено.