In GNU C, you can replace most uses of alloca
with an array of variable size. Here is how open2
would look then:
int open2 (char *str1, char *str2, int flags, int mode) { char name[strlen (str1) + strlen (str2) + 1]; strcpy (name, str1); strcat (name, str2); return open (name, flags, mode); }
But alloca
is not always equivalent to a variable-sized array, for several reasons:
A variable size array's space is freed at the end of the scope of the name of the array. The space allocated with alloca
remains until the end of the function.
It is possible to use alloca
within a loop, allocating an additional block on each iteration. This is impossible with variable-sized arrays.
Note: If you mix use of alloca
and variable-sized arrays within one function, exiting a scope in which a variable-sized array was declared frees all blocks allocated with alloca
during the execution of that scope.