##### 3.2.5.1 `alloca` Example

As an example of the use of `alloca`, here is a function that opens a file name made from concatenating two argument strings, and returns a file descriptor or minus one signifying failure:

         int
         open2 (char *str1, char *str2, int flags, int mode)
         {
           char *name = (char *) alloca (strlen (str1) + strlen (str2) + 1);
           stpcpy (stpcpy (name, str1), str2);
           return open (name, flags, mode);
         }

Here is how you would get the same results with `malloc` and `free`:

         int
         open2 (char *str1, char *str2, int flags, int mode)
         {
           char *name = (char *) malloc (strlen (str1) + strlen (str2) + 1);
           int desc;
           if (name == 0)
             fatal ("virtual memory exceeded");
           stpcpy (stpcpy (name, str1), str2);
           desc = open (name, flags, mode);
           free (name);
           return desc;
         }

As you can see, it is simpler with `alloca`. But `alloca` has other, more important advantages, and some disadvantages.