我有一个函数,我想传递一个char *数组,但是我不想创建一个变量,就像这样:
char *bar[]={"aa","bb","cc"};
foobar=foo(bar);
为了解决这个问题,我尝试了这个:
foobar=foo({"aa","bb","cc"});
但它不起作用。我也试过这个:
foobar=foo("aa\0bb\0cc");
它会发出警告并且如果我执行该程序,它会冻结 我尝试过使用星号和&符号,但是我无法让它正常工作。
甚至可能吗?如果是这样,怎么样?
答案 0 :(得分:16)
是的,您可以使用复合文字。请注意,您需要为函数提供一些方法来了解数组的长度。一种是在最后得到一个NULL。
foo((char *[]){"aa","bb","cc",NULL});
此功能已在C99中添加。
答案 1 :(得分:5)
您需要声明复合文字的类型:
foobar = foo((char *[]){"aa", "bb", "cc"});
答案 2 :(得分:1)
有时变量参数就足够了:
#include <stdarg.h>
#include <stdio.h>
void func(int n, ...)
{
va_list args;
va_start(args, n);
while (n--)
{
const char *e = va_arg(args, const char *);
printf("%s\n", e);
}
va_end(args);
}
int main()
{
func(3, "A", "B", "C");
return 0;
}
但我通常更喜欢马修和卡尔建议的方法。