używam sprintf
funkcji w C++ 11, w następujący sposób:Korzystanie sprintf z std :: string w 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;
}
Czy istnieje lepszy sposób to zrobić, niż sprawdzać za każdym razem, gdy zastrzeżone przestrzeń wystarczy? Dla przyszłej możliwości dodawania więcej rzeczy.
Czy korzystasz 'snprintf'? Ponieważ 'sprintf', jak pokazano w twoim kodzie, nie ma możliwości określenia rozmiaru bufora. 'snprintf' również zwróci wymagany rozmiar bufora, więc możesz użyć zwróconej wartości +1 jako nowego' strSize'. –
Ten kod jest bardzo błędny. 'reserve' nie zmienia rozmiaru ciągu, a' sprintf' nie zwraca negatywu tylko dlatego, że napisałeś poza granicami. Musisz przydzielić potrzebną przestrzeń * przed * wypisaniem poza granice. –
Powiązane pytanie: http://stackoverflow.com/questions/2342162/stdstring-formatowanie- like-sprintf –