Volker Kroll wrote:
On Thu, 2002-07-18 at 14:41, Daniel Bauer / MList wrote:
IMHO funktioniert die Zuweisung so nicht ... probier mal:
void tester(char* test) { strcpy (test, "langer String"); }
Das ist für sich genommen schon mal richtig, solange durch "äußere Gegebenheiten" sichergestellt ist, daß der Pointer test auf einen Speicherbereich zeigt, der groß genug ist, den neuen String samt abschließendem Null-Byte (in diesem Fall also 14 Bytes) aufzunehmen. Da man aber leicht vergißt, sowas sicherzustellen, stellt so eine Funktion eine gute Fehlerquelle da -- so entstehen die berühmten Buffer-Overflows, auf deren Kappe auch viele Sicherheitslücken gehen.
Ne, das Ergebnis ist dasselbe (bzw. es gibt einen Segmaentation fault, den ich mit malloc umgangen habe.)
In Deinem Testprogramm wird in main() ein konstanter String an tester() übergeben. Nun ist es so, daß String-Konstanten (mit gcc unter Linux) in einem Speichersegment abgelegt werden, daß als read-only markiert ist. Der damit unzulässige Versuch, den String zu überschreiben, also schreibend auf dieses Segment zuzugreifen, wird vom System abgefangen und dem Prozeß als "Segmentation fault" signalisiert (SIGSEGV). Eine mögliche Lösung hat Bernhard ja gezeigt. (Die Variante, bei der in main() mit malloc() ein veränderbarer Speicherbereich für den String reserviert wird.)
Ich fürchte, daß ist wieder ganz trivial und ich mache mich hier zum Nabbel ....
Jain. Wenn man die Pointerei etc. erst einmal richtig verstanden hat, ist das ganze *prinzipiell* recht trivial und logisch, aber trotzdem kann man sich leicht in seinen Pointern verheddern -- gerade, wenn's mal etwas komplexer wird. Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org http://www.informatik.uni-bremen.de/~eilert/