Uhrzeit in String umwandeln

Gast #756762
Hallo,

ich habe mir eine Digitaluhr gebastelt, die die aktuelle Zeit auf einem 
LCD-Dispaly ausgeben soll.
Dabie habe ich aber das Problem, dass der Uhrzeit-String, der mit 
sprintf erstellt wird, nicht funktioniert.
Wenn ich der char* - Variable manuell eine Zeichenkette zuweise 
("text="Hallo") funktioniert das wunderbar. Nur nicht mit sprintf, aber 
wieso???

Hier der Code:
1
char *uhrzeit_string = NULL;
2

3
sprintf(uhrzeit_string, "%i:%i:%i", uhrzeit.stunden, uhrzeit.minuten, uhrzeit.sekunden);
4
lcd_clrscr();
5
lcd_gotoxy(0,0);
6
lcd_puts("Uhrzeit:");
7
lcd_gotoxy(0,1);
8
lcd_puts(uhrzeit_string);
9
long_delay(50);
Gast #756764
Vll. so:
1
char uhrzeit_string[10];
2

3
sprintf(uhrzeit_string, "%i:%i:%i", uhrzeit.stunden, uhrzeit.minuten, uhrzeit.sekunden);
4
lcd_clrscr();
5
lcd_gotoxy(0,0);
6
lcd_puts("Uhrzeit:");
7
lcd_gotoxy(0,1);
8
lcd_puts(uhrzeit_string);
9
long_delay(50);
#756803
flea wrote:
> Hallo,
>
> ich habe mir eine Digitaluhr gebastelt, die die aktuelle Zeit auf einem
> LCD-Dispaly ausgeben soll.
> Dabie habe ich aber das Problem, dass der Uhrzeit-String, der mit
> sprintf erstellt wird, nicht funktioniert.
> Wenn ich der char* - Variable manuell eine Zeichenkette zuweise
> ("text="Hallo") funktioniert das wunderbar. Nur nicht mit sprintf, aber
> wieso???
>
> Hier der Code:
> [c]
> char *uhrzeit_string = NULL;
>
> sprintf(uhrzeit_string, "%i:%i:%i", uhrzeit.stunden, uhrzeit.minuten,
> uhrzeit.sekunden);


sprintf möchte eine Speicherfläche, an der es das Ergebnis
(den Text) ablegen soll. Du hast keine Speicherfläche. Du
hast nur einen Pointer.
Ein Pointer kann auf eine Speicherfläche zeigen. Er enthält
eine Speicheradresse. Aber: Das heist noch lange nicht, dass
du dadurch auch den Speicher zur Verfügung hast.

Du musst aufpassen: Wenn eine Funktion in ihrer Argumentliste
einen Pointer hat, dann heist das in den meisten Fällen nicht,
dass du beim Aufrufer auch einfach nur einen Pointer brauchst.
In den meisten Fällen heist das: Die Funktion möchte die
Adresse einer Speicherfläche haben, mit der sie arbeiten kann.
Dann brauchst du aber auch tatsächlich eine Speicherfläche
(in den meisten Fällen wird das ein Array sein oder ein
Struktur-Objekt) und nicht nur einen Pointer, der den gleichen
Typ hat, wie das Argument der Funktion.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.