Probleme mit struct, ich bekomms nicht hin.

Gast #1258601
Ich bin gerade dabei C zu lernen und hänge gerade an einem kleinen 
Problem...


Ich habe folgenden Code
1
#include .....
2

3
struct uptime {
4
  int days;
5
  int hours;
6
  int minutes;
7
};
8
.....
9
void get_up_time() {
10
  struct sysinfo s_info;
11
  struct uptime ut;
12
  int error = sysinfo(&s_info);
13
  long int uptimes = s_info.uptime; // returned in seconds
14
  ut.days = uptimes / (60*60*24);
15
  int upmind = uptimes - (ut.days * (60*60*24));
16
  ut.hours = upmind / (60*60);
17
  int upminh = upmind - ut.hours * (60*60);
18
  ut.minutes = upminh / 60;
19
}
20
....
21
void bla() {
22
....
23
int blubb() {
24
....
25
int main() {
26
...
27
char str[256];
28
struct uptime ut;
29
get_up_time();
30
sprintf(str, "%d, %02d:%02d", ut.days, ut.hours, ut.minutes);
31
...
Nun steht in buf aber immer nur "0, 00:00". Das Format stimmt ja, aber 
der Inhalt...
Die Funktion zum holen der Uptime funktioniert einwandfrei, wenn ich das 
ohne das struct mache.

Letztendlich ist das ganze nicht für die Uptime gedacht, nur zum üben, 
es sollte global bleiben und nich nur für eine Funktion, damit kann ich 
mir viel Code sparen :P

Ich hoffe ihr könnt mir bei meinem Problem ein wenig helfen :)
Gast #1258608
und wie soll denn ein Inhalt in

struct uptime ut;
get_up_time();
sprintf(str, "%d, %02d:%02d", ut.days, ut.hours, ut.minutes);

kommen?

In der Funktion get_up_time() legst du wieder eine neue Variable an, die 
danach aber wieder weg ist.
#1258612
Die Funktion get_up_time schreibt die Daten in eine eigene private 
Struktur. Diese mühsam errechneten Daten werden dann am Ende der 
Funktion quasi einfach weggeschmissen.

Du müsstest genauso vorgehen wie bei sysinfo, also der Funktion einen 
Zeiger auf eine Struktur mitgeben, wo sie die Daten dann einträgt.
Gast #1258616
Ach jetzt hab ichs ganz kapiert!

Das ut muss ja ebenfalls global sein.

Vielen Dank!
1
struct uptime {
2
  int days;
3
  int hours;
4
  int minutes;
5
} ut;
und das struct uptime ut; noch überall sonst rausnehmen.
Gast #1258623
> Du müsstest genauso vorgehen wie bei sysinfo, also der Funktion einen
> Zeiger auf eine Struktur mitgeben, wo sie die Daten dann einträgt.
sysinfo stammt nicht von mir, ich hab also (im Moment ;)) noch keine 
Ahnung wie das Funktioniert. Das war nur ein Beispielcode, den ich mir 
erst beim Abtippen und Ausprobieren von Listings zusammengebastelt hatte 
und nun hier brauchte um zu zeigen, was ich meine.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.