C: Passing an array into a function 'on the fly'
I have a function, and I want to pass an array of char* to it, but I don't want to create a variable just for doing that, like this:
char *bar[]={"aa","bb","cc"};
foobar=foo(bar);
To get around that, I tried this:
foobar=foo({"aa","bb","cc"});
But it doesn't work. I also tried this:
foobar=foo("aa\0bb开发者_StackOverflow中文版\0cc");
It compiles with a warning and if I execute the program, it freezes.
I tried playing a bit with asterisks and ampersands too but I couldn't get it to work properly.Is it even possible? If so, how?
Yes, you can use a compound literal. Note that you will need to provide some way for the function to know the length of the array. One is to have a NULL at the end.
foo((char *[]){"aa","bb","cc",NULL});
This feature was added in C99.
You need to declare the type for your compound literal:
foobar = foo((char *[]){"aa", "bb", "cc"});
Some times variable arguments are sufficient:
#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;
}
But I generally prefer the method suggested by Matthew and Carl.
精彩评论