Zeiger und Parameter
-
Hallo allerseits, kann mir jemand erklräen, warum ich bei dem Programmaufruf mit den Parametern 7643123 das Wort KANU rausbekomme???
DANKE
int main(int argc, char *argv[]) { char *z; char code[] = "SKIANZUG"; z = *++argv; z +=4; while(*z -'7') printf("%c", code[*z-- - '0']); system("PAUSE"); return 0; }
-
74635123 -> ZAUN
75631123 -> KAUZ
70061123 -> KUSS
70064123 -> NUSSWeil es der Programmierer so gewollt hat. Schade, dass er als zweites Argument nicht die Länge parametrierbar gemacht hat.
m.
-
Mhh, mich hätte eher der Weg wie ich zu dem Wort komme interessiert, da ich es nicht ganz hinbekomme??
Danke
-
Dann geh es Schritt für Schritt durch:
const char code[] = "SKIANZUG";kannst du erstmal außer acht lassen. Danach das:
char* z = *++argv;... was passiert da? Beachte das Postinkrement hier vor Dereferenzierung stattfindet.
z += 4;... Zeigerschubbsen?

-
(D)Evil schrieb:
char* z = *++argv;... was passiert da? Beachte das Postinkrement hier vor Dereferenzierung stattfindet.
Das wird wohl daran liegen dass es ein PRÄinkrement ist.
-
Möp ja meinte ich doch ^^
-
(D)Evil schrieb:
... was passiert da? Beachte das Postinkrement hier vor Dereferenzierung stattfindet.
Präinkrement;)
@Nad:
Kurzfassung: z zeigt auf das 5. Element innerhalb des 2. Strings auf den argv zeigt. Dann krückelt z in der Schleife so lange nach vorne, bis es auf eine '7' trifft. In der Schleife wird einfach das aktuelle Zeichen, auf das z zeigt, benutzt um in das Array code zu dereferenzieren ('2' entspricht Index 2 und endspricht 'I' usw.).
Könnte man übrigens auch ganz einfach mittels Debugger rausfinden;)
-
Und aufgrund von "z +=4;" werden nur die ersten 5 Zeichen des Eingabestrings beachtet, d.h. allgemeiner wäre es, die Länge des Eingabestrings zu beachten.
Außerdem wird man mit dem obigen Code niemals ein Wort mit 'G' (letzter Buchstabe von "SKIANZUG") ausgeben können, da der Offset 7 ja als Wortende betrachtet wird.
Also am besten den Code neu und allgemeingültiger schreiben...