我将一个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]
位置解析。
我花了三天时间解决这个问题。有什么想法吗?
答案 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(...)
功能,以确切了解发生了什么。