localtime mit Zeiger auf NULL verwirrt mich, weil zeigt Jetzt-Zeit an.
-
Hallo Leute,
versuche im Selbstudium bei C einen Fuss auf die Erde zu bekommen. Im moment stellt mich dieser Code Abschnitt vor ein Rätsel.
/* jetzt struct tm-Format mit asctime() */ time1=time(NULL); time2=localtime(&time1); strcpy(zeit,asctime(time2));
Wenn time NULL wird, wieso zeigt localtime(&time1) nicht 1970 an. Hier mal der ganze Code. Der Abschnitt stammt von Zeile 34.
/* time4.c */ #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> int main(int argc, char **argv) { FILE *datei; time_t time1; struct tm *time2; char zeit[25]; int c; if(argc<2) { printf("Bitte eingeben : %s textdatei.txt\n",*argv); return EXIT_FAILURE; } if((datei = fopen(*++argv,"w+")) == NULL) { printf("Konnte Datei : %s nicht öffnen!!!!\n",*argv); return EXIT_FAILURE; } printf("Eingabe machen (mit '#' beenden)\n>"); /* Wir schreiben in unsere Datei und beenden diese * mit dem Zeichen '#'. */ while((c=getchar()) != '#') putc(c, datei); putc('\n', datei); /* zuerst time_t-Format */ time(&time1); printf("Heute ist %s und Sie haben eben die " "Datei %s geschlossen\n",ctime(&time1), *argv); /* jetzt struct tm-Format mit asctime() */ time1=time(NULL); time2=localtime(&time1); strcpy(zeit,asctime(time2)); /* Das Datum schreiben wir in die Datei ... */ fprintf(datei,"%s\n",zeit); fclose(datei); return EXIT_SUCCESS; }
Vielleicht kann es mir jemand mit ein paar Stichworten erklären.
Gruss,
gutschy
-
gutschy schrieb:
Wenn time NULL wird, wieso zeigt localtime(&time1) nicht 1970 an.
Erstens: Fragezeichen.
Zweitens: RTFM.man 2 time schrieb:
time() returns the time as the number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
If t is non-NULL, the return value is also stored in the memory pointed to by t.
Sprich, ist's vollkommen egal, was du
time
für einen Parameter übergibst, du bekommst IMMER den gegenwärtigen Timestamp zurück. Und diesen Timestamp, der nicht 0, sondern der Timestamp deines gegenwärtigen Datums ist, wird dann anlocaltime
gefüttert. Und die Funktion generiert dir dann natürlich ein Datum im Jahr 2016.Hättest du ganz leicht rausfinden können, indem du dir mal
time1
vorlocaltime
ausgegeben hättest.
-
Hi dachschaden,
danke für deine Hilfe.
Hättest du ganz leicht rausfinden können, indem du dir mal time1 vor localtime ausgegeben hättest.
Das hätte mir vielleicht wirklich einfallen können. Aber gut, bin halt Anfänger.