Am Donnerstag, 18. Juli 2002 14:24 schrieb Volker Kroll:
noch mal eine dumme Frage. Wenn ich einer Funktion einen Pointer übergebe, sollte diese doch den Inhalt des Pointers ändern können. Warum funktioniert dann diese
Nö, Du kannst den Speicherbereich ändern, auf den der Pointer verweist, Du kriegst aber nur eine Kopie des Pointers selbst übergeben.
Funktion nicht: #include <stdio.h> void tester(char*); int main (int argc, char* argv[]) { char *field = "teststring";
Irgendwo im Speicher werden 11 Byte reserviert (sagen wir mal 0x100), dort wird "teststring\0" abgelegt und der char-Pointer verweist darauf (in dem Fall enthält er also 0x100).
tester(field);
Funktion Tester wird aufgerufen, übergeben wird 0x100.
printf("String: %s\n", field);
Field ist unverändert und enthält nach wie vor 0x100, der Text an der Stelle wird ausgegeben und dürfte "teststring" sein.
/* prints teststring not langer String */ return 0;
}
Hier gehts wie folgt ab:
void tester(char* test) {
0x100 wurde übergeben.
test = "langer String";
Ein neuer Speicherbereich wird allociert 14 Byte lang mit Inhalt "langer String\0", sagen wir mal direkt dahinter an 0x10c, 'test' enthält nun 0x10c, was auf 'field' nicht den geringsten Einfluss hat.
}
Mögliche Lösungen: 1. Du gibst test als Returnwert zurück und übernimmst diesen in field. 2. Du übergibst nen Pointer auf field (char **) und kannst dann das feld selbst modifizieren. -- Machs gut | http://www.iiv.de/schwinde/buerger/tremmel/ Manfred | http://www.knightsoft-net.de