正しいですか。ここで提案したソリューションは毎回バッファをコピーします。より良くするには、sprintfの戻り値を使用する必要があります。バッファの残りの長さを追跡し、私はsnprintf
を使用し、方法によって、ということ
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");
}
}
お知らせ。 常には、安全でないバージョンの代わりにこれを使用してください。あなたのアプリケーションは進化し、偉大な創造性をもってには、このバッファーをオーバーフローさせるための方法があります。その一方で、安全性はゼロになります。
バッファを自分自身にコピーするために '%s 'を使用していますか?それは*醜いです*と私はそれがうまく動作します。 –