BlueBee
BlueBee

Reputation: 85

How to initialize argv array in C

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?

Upvotes: 4

Views: 14189

Answers (4)

Henrique Mageste
Henrique Mageste

Reputation: 1

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

Upvotes: 0

brian
brian

Reputation: 11

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

Upvotes: 1

Michael Burr
Michael Burr

Reputation: 340188

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

Upvotes: 12

moopet
moopet

Reputation: 6175

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.

Upvotes: 0

Related Questions