prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.5b

那么,返回字符串或其他聚合体的正确方法是什么?


返回的指针应该指向一个静态分配的缓冲区(如问题 7.5a 的答案所示),或者指向调用者传入的缓冲区,或者指向通过malloc获取的内存,但应该指向局部(自动)数组。

例如,让调用者传递结果的空间

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

	...

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

使用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);
(在最后一种情况下,调用者必须记住在不再需要时free返回的指针。)

另请参阅问题 20.1

其他链接: 更多阅读


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管