C:将数组“即时”传递给函数

Posted

技术标签:

【中文标题】C:将数组“即时”传递给函数【英文标题】:C: Passing an array into a function 'on the fly' 【发布时间】:2011-04-14 05:36:45 【问题描述】:

我有一个函数,我想将一个 char* 数组传递给它,但我不想为此创建一个变量,如下所示:

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

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

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

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

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

编译时会出现警告,如果我执行该程序,它就会冻结。 我也尝试过使用星号和 & 符号,但无法正常工作。

有可能吗?如果有,怎么做?

【问题讨论】:

【参考方案1】:

是的,您可以使用复合文字。请注意,您需要为函数提供一些方法来了解数组的长度。一种是最后有一个NULL。

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

此功能是在 C99 中添加的。

【讨论】:

因此,如果编译器是 MSVC,则可能不可用。 谢谢,这正是我所需要的。【参考方案2】:

您需要为复合文字声明类型:

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

【讨论】:

【参考方案3】:

有时可变参数就足够了:

#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 建议的方法。

【讨论】:

以上是关于C:将数组“即时”传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

可以将 Java 数组传递给采用数组的 C/C++ 函数吗?

您将如何“即时”连接文本+整数并将其传递给函数? [复制]

通过引用将字符串数组传递给 C 函数

为啥不允许将数组按值传递给 C 和 C++ 中的函数?

将数组和数组指针传递给C中的函数之间的区别

将二维数组指针传递给c ++中的函数[重复]