Q1.Что правильно, 6 или 7?
Ни то, ни другое.6 в строке формата - это минимальная ширина, поэтому 7 символов будет недостаточно, если fCount >= 1000000
.Наименьший размер, который не будет переполнен для любого ввода - std::numeric_limits<int>::digits10 + 2
(чтобы учесть все десятичные цифры, завершающий символ и знак, если входное значение отрицательное).Предполагая, что VC6 обеспечивает <numeric_limits>
;в противном случае sizeof(int)*3 + 2
является разумной верхней границей.Если вы хотите быть уверены, позвоните snprintf
и проверьте возвращаемое значение.
Q2.Я использую VC6 и файл sample.cpp.Я думаю, что sprintf - это C. Есть ли лучший способ?Мне нужно, чтобы строка символов была правильно выровнена и имела дополняющие нули.
В большинстве случаев вам лучше использовать строки и потоки C ++, которые управляют собственной памятью и не будут переполнены, если вы не сделаете что-то оченьстранно.
std::ostringstream s;
s << setw(6) << setfill('0') << fCount;
std::string frameNum = s.str();
Я вполне уверен, что VC6 поддерживает их, но прошло уже более десяти лет с тех пор, как мне посчастливилось бороться с этим компилятором, и я приложил все усилия, чтобы точно забыть, насколько он ограничен.было.Я знаю, что вы просили меня не делать этого, но я скажу: используйте более новый компилятор.Язык сильно изменился за последние 15 лет.