我經常使用的便利函數返回指向靜態緩衝區是這樣的:在地方作爲參數傳遞給其他功能不便靜態變量
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