#### 3.2.7.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 = 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.