4

*argvを次の値で初期化しようとしています。test_filemodelresultコマンドラインを使用せずにargvを直接初期化する方法を教えてもらえますか。私はこのようにやっています:

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

しかし、それは機能していません。私はその単純さを知っていますが、プログラミングは初めてです。誰か助けてもらえますか?

4

4 に答える 4

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

注意すべきことの1つは、標準の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);
于 2012-08-22T16:10:50.850 に答える
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);
于 2016-02-03T10:06:34.623 に答える
0

このような初期化は宣言時にのみ利用可能であり、(おそらく)関数のパラメーターとしてargvを宣言しました(main私は推測します)。この場合、それぞれを個別に割り当てる必要があります。

于 2012-08-22T15:53:15.420 に答える
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);
于 2020-03-27T23:39:49.313 に答える