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:将数组“即时”传递给函数的主要内容,如果未能解决你的问题,请参考以下文章