-2

我将一个函数重命名为一个普通的main(int argc, char *argv[])子函数,比如在我的. 然后,我传递论点。例如。a(int argc, char *argv[]);a()main()

char *arg[10];

arg[0]="program_name";
arg[1]="-a";
arg[2]="1";
arg[3]="-b";
arg[4]="2";

a (5, arg);

a()返回失败。在位置a()停止解析。arg[1]我花了三天时间解决这个问题。任何想法 ?

4

3 回答 3

1

您的代码将调用的函数指针提供给常量,这不是它所期望的。您可以使用strdup生成要传递的字符串的可修改版本。解析器破坏性地修改预计只会使用一次的数据并不罕见。如果数据是恒定的,这将不起作用。

于 2012-08-21T11:45:28.803 回答
1

该程序有效:

void a(int argc, char *argv[]) {
    printf("%d\n", argc);
    int i;
    for (i = 0; i < argc; ++i) {
            printf("%s\n", argv[i]);
    }
}

main( ) {
    char *arg[10];

    arg[0]="program_name";
    arg[1]="-a";
    arg[2]="1";
    arg[3]="-b";
    arg[4]="2";

    a(5, arg);
}

输出是:

5
program_name
-a
1
-b
2
于 2012-08-21T10:36:43.093 回答
0

我建议使用调试器并单步执行该a(...)函数以查看到底发生了什么。

于 2012-08-21T10:39:17.817 回答