调用一个函数(argc,argv);在C.

时间:2012-08-21 10:30:01

标签: c main argv

我将一个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]位置解析。 我花了三天时间解决这个问题。有什么想法吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

你的代码给出了常量的被调用函数指针,这不是它所期望的。您可以使用strdup生成要传递的字符串的可修改版本。解析器破坏性地修改仅预期使用一次的数据并不罕见。如果数据不变,这将无效。

答案 2 :(得分:0)

我建议使用调试器并进入a(...)功能,以确切了解发生了什么。