How to initialize argv array in C

2020-07-18 11:05发布

I am trying to initialize *argv with these values : test_file model result Can anyone help me how to directly initialize the argv instead of using command line. I am doing it like this:

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

but its not working. I know its simple but i am new to programming. Can anyone help me?

标签: c
4条回答
神经病院院长
2楼-- · 2020-07-18 11:19

Initialisation like that is only available at declaration time, and (presumably) you've declared argv as a parameter to your function (main I assume). You will have to assign each individually in this instance.

查看更多
混吃等死
3楼-- · 2020-07-18 11:22

To conform with newer compilers, I would do this (as long as you don't want to change the strings):

char* argv[] = {const_cast<char*> ("program_name"),
                const_cast<char*> ("-arg1"),
                const_cast<char*> ("string_to_arg1"),
                const_cast<char*> ("-arg2"),
                const_cast<char*>("-arg3"),
                NULL};
int argc = sizeof (argv) / sizeof (char*) - 1;

QApplication app(argc, argv);
查看更多
该账号已被封号
4楼-- · 2020-07-18 11:34
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;
}

One thing to be aware of is that the standard argv strings are permitted to be modified. These replacement ones cannot be (they're literals). If you need that capability (which many option parsers might), you'll need something a bit smarter. Maybe something like:

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;
}      

That gets called like so:

argc = new_argv( &argv, dummy_args);
查看更多
做个烂人
5楼-- · 2020-07-18 11:37

or simply put, does this work (sorry its 3 years late ;) ) ?

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);
查看更多
登录 后发表回答