C:将一个数组传递给一个“动态”的函数

时间:2010-09-19 00:59:52

标签: c arrays parameter-passing

我有一个函数,我想传递一个char *数组,但是我不想创建一个变量,就像这样:

char *bar[]={"aa","bb","cc"};
foobar=foo(bar);

为了解决这个问题,我尝试了这个:

foobar=foo({"aa","bb","cc"});

但它不起作用。我也试过这个:

foobar=foo("aa\0bb\0cc");

它会发出警告并且如果我执行该程序,它会冻结 我尝试过使用星号和&符号,但是我无法让它正常工作。

甚至可能吗?如果是这样,怎么样?

3 个答案:

答案 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;
}

但我通常更喜欢马修和卡尔建议的方法。