目标是{{"network", "lan"}, {"dhcp", "true"}}
在调用函数时传递一个常量数组(表示相应结构参数的成员变量),如参数:
ubus_call("router", "client", {{"network", "lan"}, {"dhcp", "true"}}, 2);
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但它在编译中返回错误:
struct ubus_args {
char *key;
char *val;
};
int ubus_call(char *obj, char *method, struct ubus_args u_args[], int size_args) {
printf("%s\n", obj);
printf("%s\n", method);
printf("%s %s\n", u_args->key, u_args->val);
return 0;
}
int main ()
{
ubus_call("router", "client", {{"network", "lan"}, {"dhcp", "true"}}, 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能以正确的方式做到这一点?
这是完整的程序,你可以尝试一下.
#include <stdio.h>
struct ubus_args {
char *key;
char *val;
};
int ubus_call(char *obj, char *method, struct ubus_args u_args[], int size_args) {
printf("%s\n", obj);
printf("%s\n", method);
printf("%s %s\n", u_args[0].key, u_args[0].val);
printf("%s %s\n", u_args[1].key, u_args[1].val);
return 0;
}
int main ()
{
ubus_call("router", "client", (struct ubus_args[2]){{"network", "lan"}, {"dhcp", "true"}}, 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序在GNU GCC v4.8.3
在线编译器上进行测试.
如果您配备了C99
以上支持的编译器,则可以使用复合文字来完成工作.
你可以重写函数调用
ubus_call("router", "client", (struct ubus_args[]){{"network", "lan"}, {"dhcp", "true"}}, 2);
Run Code Online (Sandbox Code Playgroud)
它会起作用.
BTW,推荐签名main()
是int main(void)
.