timeinfo
-
hi,
wenn ich in meiner funktion timeinfo aufrufe
timeinfo = localtime ( &rawtime );
zeigt mir der rechner die aktuelle zwit an.
wenn ich aber nun die referenz von rawtime um werte erhöhe erscheinen mir eigenartige sachen:
timeinfo = localtime ( &rawtime +XX );
ein kleiner auszug:
+0 fri dec 17 2004; +1 sat feb 21 1970 -1 tue jan 27 1970 +2 sat feb 21 1970 -2 thu jan 01 1970 ... +10 mon feb 19 1970 -10 sun jan 17 2038
was passiert hier?
er soll doch nur von der rawtime z.b. 20 tage abziehen, machjt er aber nicht sondern rechnet irgendein datum aus (aber was für eins?).
was errechnet er z.B. bei &rawtime -10 ?
-
kann es sein, dass du die adresse im speicher veränderst durch dein addieren und subtrahieren von werten? dann kann auch nichts gutes rauskommen...
//edit: zur erläuterung:
#include <iostream> using namespace std; int main() { int i = 5; int* pi = &i; cout << "der wert: " << i << endl << "der wert des pointers: " << *pi << endl << "die adresse im speicher: " << &pi << endl; cout << "nach subtrahieren der Zahl 10: " << endl; cout << "der wert: " << i-10 << endl << "der wert des pointers: " << *pi - 10 << endl << "die adresse im speicher: " << &pi - 10 << endl; cin.get(); return 0; }
//2. edit:
timeinfo = localtime ( &rawtime +XX );
ich glaube, dass diese zeile in
timeinfo = localtime ( &(*rawtime +XX) );
geändert werden muss... dann wird zuerst der inhalt um den wert erhöht und dann die adresse übergeben...
-
ja, das wäre wohl des rätsels lösung
hab dank
-
enno-tyrant schrieb:
wenn ich aber nun die referenz von rawtime um werte erhöhe erscheinen mir eigenartige sachen:
timeinfo = localtime ( &rawtime +XX );
Hier werden keine Referenzen benutzt. Ausserdem kannst du Referenzen nach deren Initialisierung nicht mehr ändern.
Du benutzt hier den unären & Operator, manchmal auch Adress Operator genannt. Der sorgt dafür, dass du einen Zeiger auf den angewandten Ausdruck bekommst.
Was du also machst, ist die Adresse von rawtime zu erhöhen. Und diese gibst du dann an localtime. Da dort irgendwelche undefinierten Werte stehen, sieht die Ausgabe dann entsprechend aus.leech schrieb:
ich glaube, dass diese zeile in
timeinfo = localtime ( &(*rawtime +XX) );
geändert werden muss...
Das wird nicht funktionieren. Da rawtime vermutlich vom Typ time_t ist, kannst du dort keine Indirektion durchführen. Zudem verlangt der & Operator einen lvalue, den du aber nicht hast.
Folgendes wäre eine Möglichkeittime_t tmp = rawtime + XX; timeinfo = localtime(&tmp);