Как инициализировать массив argv в C
Я пытаюсь инициализировать * argv с помощью следующих значений: test_file model result
Кто-нибудь может помочь мне, как непосредственно инициализировать argv вместо использования командной строки. Я делаю это так:
*argv[]= {"test_file","model","output",NULL};
Но это не работает. Я знаю, что это просто, но я новичок в программировании. Кто-нибудь может мне помочь?
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