问那么,返回字符串或其他聚合体的正确方法是什么?
答返回的指针应该指向一个静态分配的缓冲区(如问题 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。
其他链接: 更多阅读