char buf[256]; sprintf(buf, "%d", 12345); // usar "buf"...
Si queremos mantener el buffer en heap:
char* buf = malloc(256); sprintf(buf, "%d", 12345); // usar "buf"... free(buf);
En C++ podríamos hacer uso de los operadores new[]/delete[]:
char* buf = new char[256]; sprintf(buf, "%d", 12345); // usar "buf"... delete[] buf;
Pero es aconsejable evitar la creación de arreglos con new[], y en su lugar hacer uso de std::vector:
std::vector<char> buf(256); sprintf(&buf[0], "%d", 12345); // usar "&buf[0]" en vez de "buf"...
El resultado: tenemos un buffer en el heap que se libera automáticamente (~std::vector) al salir del ámbito de la función que lo utiliza.