GNU C Library (libc) Programming Guide - Alloca Example


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.


Published under the terms of the GNU General Public License Design by Interspire

AltStyle によって変換されたページ (->オリジナル) /