sto usando sprintf
funzione in C++ 11, nel seguente modo:Usando sprintf con 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;
}
C'è un modo migliore per fare questo, oltre a controllare ogni volta se l'riservata lo spazio era abbastanza? Per possibilità future di aggiungere più cose.
Stai utilizzando 'Snprintf'? Perché 'sprintf', come mostrato nel codice, non ha modo di determinare la dimensione del buffer. 'snprintf' restituirebbe anche la dimensione del buffer richiesta, quindi potreste semplicemente usare il valore restituito +1 come nuovo' strSize'. –
Questo codice è molto sbagliato. 'reserve' non cambia la dimensione della stringa, e' sprintf' non restituisce il negativo solo perché hai scritto fuori limite. Devi allocare lo spazio che ti serve * prima * per scrivere fuori limite. –
Domanda correlata: http://stackoverflow.com/questions/2342162/stdstring-formatting-like-sprintf –