Ich verwende sprintf
Funktion in C++ 11, auf folgende Weise:Mit sprintf mit std :: string in C++
std::string toString()
{
std::string output;
uint32_t strSize=512;
do
{
output.reserve(strSize);
int ret = sprintf(output.c_str(), "Type=%u Version=%u ContentType=%u contentFormatVersion=%u magic=%04x Seg=%u",
INDEX_RECORD_TYPE_SERIALIZATION_HEADER,
FORAMT_VERSION,
contentType,
contentFormatVersion,
magic,
segmentId);
strSize *= 2;
} while (ret < 0);
return output;
}
Gibt es einen besseren Weg, dies zu tun, als jedes Mal zu überprüfen, ob die reservierten Platz war genug? Für die zukünftige Möglichkeit, weitere Dinge hinzuzufügen.
Verwenden Sie 'snprintf'? Weil 'sprintf', wie in Ihrem Code gezeigt, keine Möglichkeit hat, die Puffergröße zu bestimmen. 'snprintf' würde auch die erforderliche Puffergröße zurückgeben, so dass Sie einfach den zurückgegebenen Wert +1 als neue' strSize' verwenden könnten. –
Dieser Code ist sehr falsch. 'reserve' ändert die Größe der Zeichenkette nicht, und' sprintf' gibt keine negative zurück, nur weil Sie außerhalb der Grenzen geschrieben haben. Sie müssen den Platz, den Sie benötigen * vor dem Schreiben außerhalb der Grenzen zuweisen. –
Verwandte Frage: http://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf –