C语言:如何在函数调用时“即时”传递数组

8

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

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

为了解决这个问题,我尝试了以下方法:
foobar=foo({"aa","bb","cc"});

但是它不起作用。我也尝试了这个:
foobar=foo("aa\0bb\0cc");

编译时出现警告,程序执行后会卡死。
我也尝试过使用星号和&符号,但无法正常工作。

这种情况是否有解决方法?如果有,应该怎么做呢?

3个回答

19

是的,你可以使用复合字面量。请注意,您需要提供某种方式让函数知道数组的长度。其中一种方法是在末尾放置一个NULL。

foo((char *[]){"aa","bb","cc",NULL});

这个功能是在 C99 中添加的。


1
因此,如果编译器是MSVC,则该功能可能不可用。 - Jonathan Leffler

6

你需要为你的复合字面量声明类型:

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

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

但我通常更喜欢Matthew和Carl建议的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接