Я часто использую вспомогательные функции, которые возвращают указатели на статические буферы следующим образом:
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 *****
Бесстыдная вилка: посмотрите на мой собственный ответ здесь
Я думаю, это будет работать, но это также граничит с излишним. Мнения?