Probleme mit struct, ich bekomms nicht hin.

Gast #1258601
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

> 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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren