Вы правы;предложенное здесь решение будет копировать буфер каждый раз.Чтобы добиться большего, вам нужно будет использовать возвращаемое значение sprintf.
char buffer[1024];
char* end_of_buffer = buffer;
std::size_t remaining_space = sizeof(buffer);
for (auto iter = my_map.begin(); iter != my_map.end(); iter++)
{
int written_bytes = snprintf(end_of_buffer, remaining_space, "|%ld|%d", iter->first, iter->second);
if (written_bytes > 0) {
end_of_buffer += written_bytes;
remaining_space -= written_bytes;
} else {
perror("Something is wrong with the buffer");
}
}
Обратите внимание, кстати, что я использовал snprintf
, который отслеживает оставшуюся длину буфера.Вы должны всегда использовать это вместо небезопасной версии.Ваше приложение будет развиваться, и благодаря великому творчеству вы найдете способ переполнить этот буфер.Между тем безопасность сводится к нулю дополнительных затрат.
(я имею в виду, без обид, конечно.)