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\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"});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With