我经常使用的便利函数返回指向静态缓冲区是这样的:在地方作为参数传递给其他功能不便静态变量
char* p(int x) {
static char res[512];
snprintf(res, sizeof(res)-1, "number is %d", x));
return res;
}
,并使用它们:
...
some_func(somearg, p(6));
....
然而,除了不是线程安全的(可能还有更多的原因),这种“便利”具有恼人的缺点:
some_func(somearg, p(6), p(7));
以上显然不会做我想做的,因为最后两个参数将指向相同的内存空间。我希望能够让上述工作正常工作,而不会有很多麻烦。
所以我的问题是:
是否有某种神奇的办法,我已经错过了完成我想要的东西没有做繁琐的配置&释放?
***** UPDATE 2010-04-20 *****
无耻插头:看我自己的答案here
我想这会工作,但它也接壤矫枉过正。意见?
在C领域内,没有什么好的答案。在某些情况下,您可以通过要求调用者通过缓冲区来解决问题,但这会失去很多便利。 – 2010-02-09 18:16:57
这不仅仅是线程不安全,你会得到意想不到的副作用。假设你连续调用两次函数,将结果分配给两个不同的指针。当你输出两个字符串时,你会得到第二个值两次,因为两个指针指向同一个缓冲区。 – 2010-02-09 18:55:59