char *itoa(int n)
{
char retbuf[20]; /* 错! */
sprintf(retbuf, "%d", n);
return retbuf; /* 错!*/
}
一种解决方案是把返回缓冲区声明为
static char retbuf[20];
本方案并非完美, 尤其是有问题的函数可能会递归调用,
或者会同时使用到它的多个返回值时。
参考资料: [ISO, Sec. 6.1.2.4]。
翻译朱群英、孙云, LaTeX2HTML 编译 朱群英 (2005-06-23)