Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » argv Varianten, brauche Hilfe !!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.06.2004, 14:34 Uhr
~Heike
Gast


Hallo,
bin C Anfänger und hab folgende Aufgabe die ich Theoretisch lösen muß, also ohne zu coden:

Sie kennen die Anweisung main (int argc, char argv).
Beschreiben Sie was folgende Anweisungen bewirken:

*++argv;

(*++argv)[0];

*++(argv[0]);

**++argv;

(++*)*++argv;

Kann mir das ma jemand erklären was da jeweils ausgelesen wird wenn ich das Programm folgendermaßen aufrufe:

test.exe Hallo wie geht es Dir

Vielen vielen Dank.
Grüße Heike.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.06.2004, 14:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


spontan so kann aber falsch sein am besten mal testen in dem du es in ein programm hackst

C++:
*++argv; //zeigt auf Hallo

(*++argv)[0]; // w

*++(argv[0]); //i

**++argv; //g

(++*)*++argv; //öhm das kenn ich nicht ist das überhaupt definiert
//eventuell ist das ja so gemeint  (++**++argv) dann würde vermutlich ein f rauskommen



im grossen und ganzen eine akademische scheissaufgabe das verwendet keiner so
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.06.2004 um 15:04 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.06.2004, 15:09 Uhr
Pablo
Supertux
(Operator)


Ich würde sagen
*++(argv[0]); zeigt auf das nächtse, also auf "Hallo" bzw wenn man die 4 Anweisung hintereinander schreibt: "geht"

(++*)*++argv; finde ich komisch. Das zeigt auf das nächste Zeichen vom nächsten Array.

Angenommen *argv zeigt auf "Hallo", dann (++*)*++argv auf i von "wie". Mein Compiler zeigt mri da aber
a.c: In function `main':
a.c:4: parse error before `)'

wenn ich sowas kompilieren kann. ich glaube, das ist nicht definiert.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.06.2004, 15:14 Uhr
(un)wissender
Niveauwart


(++*)*++argv ist Blödsinn, wohin soll der Cast den führen?
++ ist schließlich kein Typ, ++* auch nicht.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.06.2004, 15:53 Uhr
~Heike
Gast


Erstma Danke für Eure Antworten.

Hätte dazusagen müssen das die Dinger nicht hintereinander ausgeführt werden sollen sondern immer nur einzeln. Wirklich ne beschissene Aufgabe...!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.06.2004, 16:07 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na dann halt so

C++:
*++argv; //zeigt auf Hallo
(*++argv)[0]; // H
*++(argv[0]); //e
**++argv; //H
(++**++argv); //I


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.06.2004, 16:59 Uhr
~AS
Gast


Hallo,

so bescheiden ist die Aufgabe gar nicht.

Wenn mich meine rudimentären Kentnisse im Dos-Programmieren nicht verlassen haben, ist die main () Anweisung falsch.

Wenn sie nämlich so :

main (int argc,char *argv[])

heißt, bekommt das ganze etwas mehr Sinn.

int argc ist die Anzahl der Argumente
char *argv[] ist eine Liste von Argumenten definiert als array of pointers of char oder als pointer to pointer to char. ( siehe Hilfe zu main())

d.h.
Man bekommt eine Liste mit den übergebenen Argumenten.
z.B. :

char * argv[6];
char null[]="Hallo";
char eins[]="wie";
char zwei[]="geht";
char drei[]="es";
char vier[]="Dir";
char fuenf[]="";
argv[0]=null;
argv[1]=eins;
argv[2]=zwei;
argv[3]=drei;
argv[4]=vier;
argv[5]=fuenf;

mit
char *X = *++argv;
enthält X den Zeiger auf das zweite Feld (eins) mit dem Inhalt "wie". Das übergebene argv zeigt auf das erste Feld. mit ++argv wird der Zeiger incrementiert und zwar bevor die Zuweisung erfolgt.

mit
Y = (*++argv)[0]
enthält Y das erste Element des zweiten Feldes also 'w'. Erklärung siehe oben.

mit
char Z = *++(argv[0]);
enthält Z das zweite Element des ersten Feldes also 'a'. argv[0] zeigt auf das 'H' des ersten Feldes mit dem Inhalt "Hallo". der Zeiger wird incrementiert, also zeigt er auf "allo". Die Zuweisung wir nur über das erste Zeichen gemacht, daher 'a'.

mit
char W =**++argv;
enthält das erste Zeichen des Feldes, daß Du mit *++argv erhältst (siehe oben bei X). Also 'w'.

Beim letzten Argument muß ich mich neinen Vorrednern anschließen.

Ich hoffe geholfen zu haben und nich nur mehr Verwirrung gestiftet habe. Aber mit dem post- und präfix incrementieren und decrementieren kann man zwar elegant programmieren, aber diejenigen, die das zu pflegen haben sind arm dran.


mfg
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.06.2004, 17:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@AS
nein das stimmt nicht so ganz...
in argv[0] steht immer der programmname selbst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.06.2004, 20:05 Uhr
~AS
Gast


@Windalf

Danke für den Hinweis.

Dann verschiebt sich die Erklärung also um ein Feld.
*++argv Hallo
(*++argv)[0] H
*++(argv[0]) Zweites Zeichen des Programmnamens
=**++argv H

mfg
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.06.2004, 20:13 Uhr
0xdeadbeef
Gott
(Operator)


Ganz abgesehen davon ist char *argv[] ein Array von pointern, nicht ein pointer auf ein Array. Demenstprechend sind alle Ausdrücke, die ++argv enthalten, nicht gültig.

Es gibt die Möglichkeit, das System da auszutricksen, indem man char **argv definiert, aber ANSI ist das dann eigentlich nicht mehr.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.06.2004 um 20:14 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: