Pregunta

Tengo el siguiente código:

char stringHour[50], stringMinute[50], stringSecond[50];

// lots of code...
itoa(hour, stringHour, 10);
itoa(minute, stringMinute, 10);
itoa(second, stringSecond, 10);

strcat(":", stringSecond);
strcat(":", stringMinute);
strcat(stringMinute, stringSecond);
// stringHour contains both HH and :SS:MM
strcat(stringHour, stringMinute);
drawText(HRES/2 - 4, VRES - GLYPH_HEIGHT*2, 
stringHour, black);

hour, minute y second son todos enteros.

Lo que quiero hacer es el tiempo diplay de la siguiente manera: HH: MM: SS.

Las variables se garantiza que sea entre 0 y 59 (excepto Hout, 0-24).

drawText es correcta.

Este bloque de código se bloquea mi programa, y ??no puedo encontrar mal nada con ella. ¿Puede usted?

Gracias por su tiempo!

¿Fue útil?

Solución

Lo más probable es el bit que está fallando es esta pieza:

... stuff removed
strcat (":", 
... other stuff removed

casi con toda seguridad no puede strcat cosas en un literal de cadena en la plataforma que está utilizando.

El enfoque strcat tiene buffer overflow a cuestiones de seguridad también. Tal vez el uso de snprintf podría ser una alternativa mejor?

Otros consejos

Esto es un error:

strcat(":", stringSecond);

No se puede utilizar un literal de cadena para el primer argumento. Ver strcat doc.

Además, lo mejor es que las matrices init a cero.

char stringHour[50] = {0}, stringMinute[50] = {0}, stringSecond[50] = {0};

A continuación, intente almacenar el resultado de que el gato en una cadena para ver lo que te ocurrió.

No se puede modificar literales de cadena; uso char buffer[] = "MyLiteral" lugar y luego strcat() a eso.

(La razón de este hecho es que el compilador puede optimizar el tamaño del código mediante la consolidación de varias instancias de los literales de cadena en un caso en una sección de sólo lectura del archivo ejecutable, por lo que si pudiera cambiar una instancia, que había cambio todo lo demás, que daría lugar a un comportamiento impredecible.)

También - su strcat está en orden inverso. strcat realidad "concatena" - así cambiar el orden. strcat (stringHour, ":"); strcat (stringHour, stringMinute); strcat (stringHour, ":"); strcat (stringHour, stringSecond);

Sin embargo, esto es bastante terrible - por qué no utilizar sprintf? También - otras bibliotecas, excepto para la construcción de la cadena - posiblemente se ven en el BSL. La biblioteca estándar de C en realidad no tiene ninguna comprobación de errores para que sea -. Por lo que es un rodaje en el pie, a menos que sepa exactamente lo que está haciendo y lo que se espera de la str * familia de funciones

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