Domanda

Ho il seguente codice:

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 e second sono tutti interi.

Quello che voglio fare è il tempo diplay la seguente: HH: MM: SS.

Le variabili sono garantiti per essere tra 0 e 59 (tranne hout, 0-24).

drawText è corretta.

Questo blocco di codice si blocca il mio programma, e non riesco a trovare sbagliato qualsiasi cosa con esso. Puoi?

Grazie per il vostro tempo!

È stato utile?

Soluzione

Più che probabile il bit che sta fallendo è questo pezzo:

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

È quasi certamente non potete roba strcat su un letterale di stringa sulla piattaforma che si sta utilizzando.

L'approccio strcat ha overflow del buffer problemi di sicurezza come bene. Forse usando snprintf potrebbe essere un'alternativa migliore?

Altri suggerimenti

Questo è sbagliato:

strcat(":", stringSecond);

Non è possibile utilizzare un valore letterale stringa per il primo argomento. Vedere strcat doc.

Inoltre, è meglio matrici init a zero.

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

Quindi provare memorizzare il risultato del gatto in una stringa per vedere che cosa si arriva con.

Non è possibile modificare le stringhe letterali; uso char buffer[] = "MyLiteral" invece e poi strcat() a questo.

(La ragione di questo fatto è che il compilatore può ottimizzare la dimensione del codice attraverso il consolidamento di più istanze di tuoi letterali stringa in un caso in una sezione di sola lettura del file eseguibile, e quindi se si potrebbe cambiare un caso, che ci si cambiamento tutto il resto, che si tradurrebbe in un comportamento imprevedibile.)

Inoltre - il tuo strcat è in ordine inverso. strcat in realtà "concatena" - in modo da modificare l'ordine. strcat (stringHour, ":"); strcat (stringHour, stringMinute); strcat (stringHour, ":"); strcat (stringHour, stringSecond);

Tuttavia, questo è abbastanza terribile - perché non utilizzare sprintf? Inoltre - altre biblioteche, tranne per la costruzione di archi - eventualmente esaminare la BSL. La libreria standard C ha in realtà alcun controllo degli errori neanche per te -. Quindi è un germoglio in un piede, se non si sa esattamente cosa si sta facendo e cosa ci si aspetta dalla str * famiglia di funzioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top