C - Code für LINUX - Time
-
Hallo Leute!
Versuche gerade für C unter LINUX eine Timefunktion zu schreiben:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> char *uhrzeit() { struct tm *zeit; char string[80]; char string1[80]; char *string2=""; time_t sekunden; time (&sekunden); zeit=gmtime(&sekunden); strftime(string, 80,"%d.%m.%Y %H:%M:%S",zeit); strcpy (string1, string); string2 = (char*) string1; printf (""); return string2; } int main() { printf ("%s", uhrzeit()); return EXIT_SUCCESS; }
Wie kann man das besser, schreiben und warum gibt mir die Funktion nur mit printf (""); die Zeit aus, wenn ich das weglasse funktioniert es nicht!
Hilfe Coolbininet
-
Du gibts die Addresse einer lokalen Variable auf dem Stack zurück. Das klappt so nicht. Du kannst der Funktion entweder einen Buffer als weiteren Parameter übergeben, in den du dann den Zeit String reinschreibst oder du allozierst Speicher auf dem Heap mit malloc(). Allerdings musst du den allozierten Speicher dann mit free() wieder freigeben, wenn du ihn nicht mehr benötigst.
-
Wie mache ich das im Code richtig?
Grüsse
Coolbininet
-
So kommt man der sache etwas näher:
void uhrzeit(char *string2); int main() { char string2[128]; printf ("%s", uhrzeit(string2)); return EXIT_SUCCESS; }
Das Array in dem die Zeichenkette abgelegt wird, kann nicht innerhalb der Funktion uhrzeit angelegt werden, weil es nach dem die Funktion beendet wurde auch gelöscht wird.(WebNubbi hat es schon mal erklärt)
Dass es mit printf("") funktioniert ist nur ein Zufall, es geht aus dem Quellcode nicht hervor das es so funktioniert sollte.Ansonsten wenn du so was:
char *string2=""
in dein Quellcode reinschreibst dann schau dir nochmal wie Zeichenketten in C gehandhabt werden.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.