如何在C中初始化argv数组

时间:2012-08-22 15:48:25

标签: c

我正在尝试使用以下值初始化* argv:test_file模型结果 任何人都可以帮我如何直接初始化argv而不是使用命令行。我是这样做的:

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

但它不起作用。我知道它很简单,但我是编程的新手。任何人都可以帮助我吗?

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:1)

或简单地说,这是否有效(对不起它已经晚了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);

答案 2 :(得分:0)

这样的初始化仅在声明时可用,并且(可能)您已将argv声明为函数的参数(我假设为main)。 您必须在此实例中单独分配每个。

答案 3 :(得分:0)

为了与更新的编译器兼容,我会这样做(只要您不想更改字符串):

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