Forum: Compiler & IDEs Probleme mit struct, ich bekomms nicht hin.


von oioi (Gast)


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 :)

von Peter (Gast)


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.

von Stefan E. (sternst)


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.

von oioi (Gast)


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.

von Mark B. (markbrandis)


Lesenswert?

Stefan Ernst schrieb:
> Du müsstest genauso vorgehen wie bei sysinfo, also der Funktion einen
> Zeiger auf eine Struktur mitgeben, wo sie die Daten dann einträgt.

Oder eine wirklich globale Variable dafür nehmen. :-)

von oioi (Gast)


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.

von Stefan E. (sternst)


Lesenswert?

> ich hab also (im Moment ;)) noch keine Ahnung wie das Funktioniert.

1
void get_up_time ( struct uptime *ut ) {
2
...
3
ut->days = ...
4
...
5
}
6
7
struct uptime ut;
8
get_up_time(&ut);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.