I know that arrays with lengths determined at runtime are possible by declaring the array normally:
char buf[len];
and I know that I can declare an array as a compound litral and assign it to a pointer midway:
char *buf;
....
buf = (char[5]) {0};
However, combining the two doesn’t work (is not allowed by the standard).
My question is: Is there any way to achieve the effect of of the following code? (note len)
char *buf;
....
buf = (char[len]) {0};
Thank you.
The language explicitly prohibits this
If you need something like this, you’d have to use a named VLA object instead of compund literal. However, note that VLA types do not accept initializers, meaning that you can’t do this
(I have no idea what the rationale behind this restriction is.)
So, in addition to using a named VLA object you’ll have to come up with some way to zero it out, like a
memsetor an explicit cycle.