我经常使用便捷函数返回指向静态缓冲区的指针,如下所示:
char* p(int x) {
static char res[512];
snprintf(res, sizeof(res)-1, "number is %d", x));
return res;
}
Run Code Online (Sandbox Code Playgroud)
并将它们作为其他函数的参数在整个地方使用:
...
some_func( somearg, p(6) );
....
Run Code Online (Sandbox Code Playgroud)
然而,这种"便利性"除了不是线程安全之外还有一个恼人的缺点(可能还有更多原因):
some_func( somearg, p(6), p(7) );
Run Code Online (Sandbox Code Playgroud)
上面显然没有做我想要的,因为最后两个参数将指向相同的内存空间.我希望能够在没有太多麻烦的情况下使上述方法正常工作.
所以我的问题是:
我是否有一些神奇的方式来完成我想要的东西而不用繁琐的分配和释放?
*****更新2010-04-20*****
无耻的插头:在这里看看我自己的答案
我想它会起作用,但它也接近于矫枉过正.意见?