Zitat Zitat von shutdown Beitrag anzeigen
Ok, bin da jetzt durchgestiegen denke ich - viel Dank für die Hilfe!

Ein char-array ist eine Aneinanderreihung von chars und der Name des Arrays (ohne [x]) ist ein Pointer auf das erste char und kann deswegen wie ein char * benutzt werden, das auch nur ein Pointer ist - allerdings nicht mehr in die einzelnen chars "zerlegt" werden kann, da ja nur der Pointer selbst da ist. Deswegen kann man da auch nicht reinschreiben, da der Pointer ja wirklich nur eine Speicheradresse ist und selber keine Daten enthält (im Gegensatz zum char array, das eine Ansammlung von Daten ist).
In einen Pointer kann man auch schreiben, z.B. wenn du ihm einen Wert zuweist (dann änderst du den Wert des Pointers) bzw. wenn der Pointer auf etwas zeigt, dann kannst du mit *ptr (der * ist hierbei der Dereferenzierungsoperator) den Inhalt, auf den der Pointer zeigt, ändern.

Code:
char test1[]="Hallo 1";
char test2[]="Hallo 2";
char *ptr=NULL;

ptr=test1;             //Wert des Pointers geändert
*ptr='B';              //test1 hält jetzt "Ballo 1"
ptr=test2;
*ptr='J';

strtok() kann genau deswegen auch nur auf char arrays angewendet werden, da es lt. manpage die gesuchten Zeichen durch Null-Terminatoren ersetzt und nur einen Pointer auf das erste Zeichen des Strings bzw das erste Zeichen nach dem neu gesetzen Null-Terminator liefert.
Logisch ist dadurch auch, das, wenn man diesen Fehler begeht, ein Segfault produziert wird, da ja nur ein Pointer und keine Daten da sind. (Wo nichts ist sollte man auch nichts reinschreiben, und wenn nur der Anfang des Strings bekannt ist, schreibt man viel zu leicht einen längeren String rein und würde dadurch in "fremden" Speicherbereichen landen)

Soweit richtig erklärt? Wenn ja hab ichs wirklich geblickt
Passt soweit denke ich. Allerdings wirst du dich jetzt sicherlich nicht das letzte Mal fragen, was jetzt ein Pointer, was ein Array ist und wieso da ein & bzw. ein * davor muss... das ganze ist doch ziemlich verwirrend