Frage

Ich habe den folgenden Code:

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 und second sind alle ints.

Was ich tun möchte, ist die Diplay -Zeit wie folgt: HH: MM: SS.

Die Variablen liegen garantiert zwischen 0 und 59 (außer Hout, 0-24).

DrawText ist korrekt.

Dieser Codeblock stürzt mein Programm ab, und ich kann nichts falsch daran finden. Können Sie?

Vielen Dank für Ihre Zeit!

War es hilfreich?

Lösung

Mehr als wahrscheinlich ist das Bit, das fehlschlägt, dieses Stück:

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

Sie können mit ziemlicher Sicherheit nicht können strcat Sachen auf einer Saitenliteral auf der Plattform, die Sie verwenden.

Das strcat Der Ansatz hat auch Probleme mit dem Pufferüberlauf. Vielleicht benutze snprintf Könnte eine bessere Alternative sein?

Andere Tipps

Das ist falsch:

strcat(":", stringSecond);

Für das erste Argument können Sie keine Saitenliteral verwenden. Sehen Strcat Dokument.

Außerdem ist es am besten, Arrays auf Null zu initieren.

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

Versuchen Sie dann, das Ergebnis der Katze in eine Schnur zu speichern, um zu sehen, was Sie sich einfallen lassen.

Sie können keine String -Literale ändern. verwenden char buffer[] = "MyLiteral" Stattdessen und dann strcat() dazu.

(Der Grund dafür ist, dass der Compiler die Codegröße optimieren kann, indem sie mehrere Instanzen Ihrer String-Literale in einer Instanz in einem schreibgeschützten Abschnitt der ausführbaren Datei konsolidieren. Wenn Sie also eine Instanz ändern können, würden Sie alles andere ändern , was zu unvorhersehbarem Verhalten führen würde.)

Auch - Ihr Strcat ist in umgekehrter Reihenfolge. STRCAT "verkettet" tatsächlich - ändern Sie also die Reihenfolge. Strcat (StringHour, ":"); Strcat (StringHour, StringMinute); Strcat (StringHour, ":"); Strcat (StringHour, Stringsecond);

Das ist jedoch ziemlich schrecklich - warum nicht Sprintf verwenden? Auch - andere Bibliotheken mit Ausnahme von String Building - schauen Sie möglicherweise in die BSL. Die C -Standardbibliothek hat auch keinen Fehler, der Sie auch für Sie überprüft. Sie ist also ein Shooting selbst im Fuß, es sei denn, Sie wissen genau, was Sie tun und was von der STR* -Funktion von Funktionen erwartet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top