On Sun, 2003-01-26 at 13:20, Bernhard Walle wrote:
Hallo,
On Sun, 26 Jan 2003 at 12:49 (+0100), David Haller wrote:
On Sun, 26 Jan 2003, Bernhard Walle wrote:
On Sun, 26 Jan 2003 at 01:08 (+0100), David Haller wrote:
On Sat, 25 Jan 2003, Bernhard Walle wrote:
[struct tm initialisieren]
[..]
Ich wuerde stattdessen folgendes machen:
[..]
memset(&tm, 0, sizeof(tm));
^^^^^^^^^^ sizeof(struct tm) !
Nicht unbedingt. Er hat ja eine Variable vom Typ struct tm mit dem Namen
tm (keinen Pointer!) deklariert. Dann funktioniert auch sizeof(tm).
Sicher?
Ja, oben wird mit sizeof(tm) die Grösse der Variable tm ermittelt.
Nein. Ich kenn's halt so.
Möglicherweise bist Du dann auf eine der typischen C vs. C++ Fallen
aufgelaufen und/oder verwendest nur C++:
Eine Variante des obigen Beispiels:
#include
#include
int main(void) {
struct tm tmx;
printf("%u\n", sizeof(tmx));
printf("%u\n", sizeof(struct tm));
printf("%u\n", sizeof(tm));
return 0;
}
Als "C" übersetzt:
# gcc -o sizeof -Wall sizeof.c
sizeof.c: In function `main':
sizeof.c:8: `tm' undeclared (first use in this function)
sizeof.c:8: (Each undeclared identifier is reported only once
sizeof.c:8: for each function it appears in.)
-> Fehler.
Als "C++" übersetzt:
# g++ -o sizeof -Wall sizeof.c
-> Kein Fehler.
In C++ kann bei "struct-Typen" das struct-Schlüsselwort weggelassen werden.
Verwendet man dann struct tm tm;, wird sizeof(tm) kontext-sensitiv:
1. Beispiel:
struct tm *tm1;
printf("%u, %u, %u\n", sizeof(tm1), sizeof(tm), sizeof(struct tm));
=> 4, 44, 44
sizeof(tm) == sizeof(struct tm)
2. Beispiel
struct tm *tm;
printf("%u, %u, %u\n", sizeof(tm), sizeof(tm), sizeof(struct tm));
=> 4, 4, 44
sizeof(tm) == sizeof(struct tm*) == sizeof(Variable tm);
Ralf