Ich kam auf dieses Time Conversion-Programm in HackerRank, ich war überrascht, wie das Programm in HackerRank kompiliert wird (oder könnte mein Missverständnis von C sein).C Programm Time Conversion
#include <stdio.h>
int main() {
int hh, mm, ss;
char tt[2];
scanf("%d:%d:%d%s", &hh, &mm, &ss, tt);
printf("%d\n", hh);
if(strcmp(tt, "PM") == 0 && hh != 12) hh += 12;
if(strcmp(tt, "AM") == 0 && hh == 12) hh = 0;
printf("%02d:%02d:%02d", hh, mm, ss);
return 0;
}
Das obige Programm, wenn ich in meinem Computer lief, MinGW 32-Bit-GCC Compiler verwendet wurde, wurde ich den Wert von hh als Null zu bekommen.
Fein, dachte ich Compiler Problem sein könnte und lief den Code in IDEONE, gleiche Ergebnisse.
Aber wenn ich diesen gleichen Code mit HackerRank lief, wurden alle Testfälle bestanden, ich habe keine Ahnung, wie diese Arbeit hier ist?
Ich bin in diesem Stadium verwirrt, mache ich das richtig?
Sie haben eine 1-Zeichen-Abkürzung für 'char tt [2];' Sie haben das Zeichen * nul-termining * vergessen. Du brauchst mindestens 'char tt [3] =" ";" AM "oder" PM "zu halten (die Initialisierung ist nur eine gute Übung) –
@ DavidC.Rankin, wie gibt Variable hh Null zurück, nur wegen char Zeiger hat einen kürzeren Speicherplatz? und wie läuft es auf hackerrank? – cs1193
Es läuft schlecht. Sie rufen undefiniertes Verhalten auf. – Lundin