Der Martin: C/C++ Befehl time(NULL) falscher Wert?

Beitrag lesen

Hallo,

    uint8_t stamp[4] ;
    * stamp = time(NULL);

Ohne C zu können: time() liefert einen Wert vom Typ time_t, kein uint8_t (was hardwareseitig identisch sein mag), vor allem aber keinen Zeiger auf uint8_t (oder time_t) – entferne erstmal das Sternchen vor stamp.

ohne C zu können, hast du vermutlich genau den Knackpunkt gefunden, aber falsch erklärt bzw. die falschen Schlüsse daraus gezogen.

Also: tatsächlich liefert time() einen Wert vom Typ time_t, und das ist ein uint32 (also im üblichen Sprachgebrauch ein DWORD). In ralphis Beispiel ist stamp deklariert als Array von vier uint8 (also BYTE). Die Zuweisung

* stamp = time(NULL);

ist de facto identisch mit

stamp[0] = time(NULL);

weil die Nennung eines Arrays ohne Index-Klammern gleichwertig mit einem Zeiger auf das erste Array-Element ist, und weist daher dem ersten Byte von stamp das Ergebnis von time() zu. Dabei findet implizit ein Typecast von DWORD auf BYTE statt, bei dem Information verlorengeht (vom Compiler hätte ich an der Stelle eigentlich eine Warnung erwartet), während stamp[1] bis stamp[3] uninitialisiert bleiben und zufällige Werte enthalten.

Aber ralphi will ja den von time() gelieferten DWORD-Wert in den vier Bytes stamp[0] bis stamp[3] haben. Am einfachsten wäre das wohl mit:

time((time_t*) stamp);

Ich möchte gerne den Timestamp zu einem Sensormodul (nRF24L01+) senden, zwengs Messwertzuordnungen.

Bei aller Liebe: Was meinst du denn bitte mit "zwengs"? Doch nicht etwa "zwecks", vom Zweck?

Das fiel mir auch auf, aber ich habe einfach drüber hinweggelesen. :-)

So long,
 Martin