Pregunta

int fCount = 0;
char frameNum[7];
sprintf(frameNum, %06u", fCount);


int fCount = 0;
char frameNum[6];
sprintf(frameNum, %06u", fCount);

Q1. ¿Cuál es correcto, 6 o 7?

Q2. Estoy usando VC6 y el archivo es sample.cpp.
Creo que Sprintf es C. ¿Hay una mejor manera? Necesito la cadena de char justificado y con ceros acolchados.

Por favor, no me digas que use un compilador más nuevo. Necesito usar VC6 por ahora.

¿Fue útil?

Solución

El primero es correcto. No hay fuga de memoria, por cierto.

--

Creo que Sprintf es C. ¿Hay una mejor manera?

Sí. C ++ Way:

std::stringstream ss;  //#include <sstream>
ss << fCount;
std::string frameNum = ss.str();

Otros consejos

7, como Sprintf agregará un byte nulo ' 0' al final de la cadena.

Tampoco será una fuga de memoria: ¡los datos están en la pila!

Q1. ¿Cuál es correcto, 6 o 7?

Ninguno de los dos. El 6 en la cadena de formato es un mínimo ancho, por lo que 7 caracteres no serán suficientes si fCount >= 1000000. El tamaño más pequeño que no se desbordará para ninguna entrada es std::numeric_limits<int>::digits10 + 2 (Para permitir todos los dígitos decimales, el carácter de terminación y el signo si la entrada es negativa). Suponiendo que VC6 proporciona <numeric_limits>; de lo contrario sizeof(int)*3 + 2 es un límite superior razonable. Si quieres estar seguro, llame snprintf y verifique el valor de retorno.

Q2. Estoy usando VC6 y el archivo es sample.cpp. Creo que Sprintf es C. ¿Hay una mejor manera? Necesito la cadena de char justificado y con ceros acolchados.

En la mayoría de los casos, es mejor que use cadenas y transmisiones de C ++, que administran su propia memoria y no se desbordan a menos que haga algo muy extraño.

std::ostringstream s;
s << setw(6) << setfill('0') << fCount;
std::string frameNum = s.str();

Estoy bastante seguro de que VC6 lo apoya, pero ha pasado más de una década desde que tuve la desgracia de luchar con ese compilador, y he hecho todo lo posible para olvidar exactamente lo limitado que era. Sé que me pidiste que no lo hiciera, pero diré: usa un compilador más nuevo. El idioma ha cambiado mucho en los últimos 15 años.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top