prev up next   top/contents search

comp.lang.c FAQ list · Question 7.5b

Q: So what's the right way to return a string or other aggregate?


A: The returned pointer should be to a statically-allocated buffer (as in the answer to question 7.5a), or to a buffer passed in by the caller, or to memory obtained with malloc, but not to a local (automatic) array.

For example, to have the caller pass space for the result:

	char *itoa(int n, char *retbuf)
	{
		sprintf(retbuf, "%d", n);
		return retbuf;
	}

	...

	char str[20];
	itoa(123, str);

To use malloc:

	#include <stdlib.h>

	char *itoa(int n)
	{
		char *retbuf = malloc(20);
		if(retbuf != NULL)
			sprintf(retbuf, "%d", n);
		return retbuf;
	}

	...

	char *str = itoa(123);
(In this last case, the caller must remember to free the returned pointer when it is no longer needed.)

See also question 20.1.

Additional links: further reading


prev up next   contents search
about this FAQ list   about eskimo   search   feedback   copyright

Hosted by Eskimo North