www.mikrocontroller.net

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


Autor: oioi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin gerade dabei C zu lernen und hänge gerade an einem kleinen 
Problem...


Ich habe folgenden Code
#include .....

struct uptime {
  int days;
  int hours;
  int minutes;
};
.....
void get_up_time() {
  struct sysinfo s_info;
  struct uptime ut;
  int error = sysinfo(&s_info);
  long int uptimes = s_info.uptime; // returned in seconds
  ut.days = uptimes / (60*60*24);
  int upmind = uptimes - (ut.days * (60*60*24));
  ut.hours = upmind / (60*60);
  int upminh = upmind - ut.hours * (60*60);
  ut.minutes = upminh / 60;
}
....
void bla() {
....
int blubb() {
....
int main() {
...
char str[256];
struct uptime ut;
get_up_time();
sprintf(str, "%d, %02d:%02d", ut.days, ut.hours, ut.minutes);
...
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 :)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: oioi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach jetzt hab ichs ganz kapiert!

Das ut muss ja ebenfalls global sein.

Vielen Dank!
struct uptime {
  int days;
  int hours;
  int minutes;
} ut;
und das struct uptime ut; noch überall sonst rausnehmen.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht 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. :-)

Autor: oioi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

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

void get_up_time ( struct uptime *ut ) {
...
ut->days = ...
...
}

struct uptime ut;
get_up_time(&ut);

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.