【发布时间】:2011-01-14 22:28:45
【问题描述】:
我经常使用像这样返回指向静态缓冲区的指针的便捷函数:
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) );
上面显然没有做我想要的,因为最后两个参数将指向相同的内存空间。我希望能够在没有太多麻烦的情况下使上述内容正常工作。
所以我的问题是:
是否有一些我错过的神奇方法可以在不进行繁琐的分配和释放的情况下完成我想要的?
***** 2010-04-20 更新 *****
无耻插件:看我自己的回答here
我想它会起作用,但它也有点矫枉过正。意见?
【问题讨论】:
-
在 C 领域内,并没有什么好的答案。在某些情况下,您可以通过要求调用者传递缓冲区来解决问题,但这会失去很多便利。
-
这不仅仅是线程不安全的,你会得到意想不到的副作用。假设您连续两次调用该函数,将结果分配给两个不同的指针。当你输出两个字符串时,你会得到第二个值两次,因为两个指针都指向同一个缓冲区。
标签: c pointers memory-management