Reputation: 85
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
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
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
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
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