009
23.07.2006, 22:27 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
C++: |
char i; // <- ein buchstabe const char *j = "Hallo"; // <- Zeichenkette (in nem Konstanten abschnitt) char k[6] = "Hallo"; // <- Zeichenkette (beschreibbar, auch einfach k[] = "Hallo" wäre möglich) const char **l = {"Hallo" "Du"}; // Array von Zeigern auf (hier) konstante Zeichenketten. char l[4][5]; // <- das hier wär (fast) das selbe, d.h 4 elemente für max 4elementige Zeichenketten (+ Null-Terminator)
|
den Speicher für argv legt dir jedoch das Betriebsystem an:
./programm a b c
Als Pseudocode macht das BS dann folgendes:
C++: |
argc = (int)3; argv = (char**){ (char*){'.', '/', 'p', 'r', 'o', 'g', 'r', 'a', 'm', 'm', '\0'}, (char*){'a', '\0'}, (char*){'b', '\0'}, (char*){'c', '\0'}, NULL };
|
das
{'a', '\0'} kann man in dem Fall auch "a" schreiben, wollte es nur der ausführlichkeit mal tun.
Achja, was evtl wichtig ist: die einzelnen Elemente müssen imho NICHT hintereinander im Speicher liegen, in argv selbst stehen ja nur die adressen:
argv[0] = 0x???????? argv[1] = 0x???????? argv[2] = 0x???????? argv[3] = 0x???????? argv[4] = 0x0000000 (oder je nachdem auf was NULL definiert ist)
die jeweiligen Adressen zeigen dann auf die Zeichenketten im Speicher. -- class God : public ChuckNorris { }; |