Eingabewert von strtok..
-
Hallo,
ich hab zwar ein bisschen rumgegoogelt und in den Referenzen geschaut, aber wirklich draufgekommen bin ich nicht.char *ausgabe[3]; char *eingabe = "das ist geil"; ausgabe[0] = strtok(eingabe, "s"); ausgabe[1] = strtok(NULL, "s"); ausgabe[2] = strtok(NULL, "i");
=> Segmentation Fault bei strtok
char *ausgabe[3]; char eingabe[] = "das ist geil"; ausgabe[0] = strtok(eingabe, "s"); ausgabe[1] = strtok(NULL, "s"); ausgabe[2] = strtok(NULL, "i");
=> Works... Was ist da der Unterschied, ob ich ein char *xx oder char xx[] definiere?
-
Das ist beides ziemlich kreuzfalsch ... kommst Du drauf, warum?
Du legst char *zeiger[3] an.
Was tust Du denn damit? Wenn irgendwas danach nicht crasht, ist das nur Zufall.
-
Ich denke mal
char string[] = "Das ist ein veraenderbarer String";
liegt auf dem Stack und ist veränderbar, und
char *string = "Das ist ein konstanter String";
ist ein Pointer auf einen String im nicht veränderbaren Speicherbereich, deshalb bekommst Du auch eine Zugriffsverletzung.
-
Auf char *string="Text" darfst du in dem Fall nur lesend zugreifen.
Bei char string[]="Text" kannst auch schreibend zugreifen.strtok greift schreibend zu, da es statt dem Trennzeichen ein 0byte einfügt. Daher crasht Variante 1 und Variante 2 nicht.
-
char *c1="text1", c2[]="text1";
char *c3="text2", c4[]="text2";
printf("%p -- %p", c1, c2);
printf("\n%p -- %p", c3, c4);Probier das mal aus, dann siehst du dass *c in einem ganz anderen Speicherbereich wie c[] liegt.
*c liegt im Datenbereich des ausführbaren Programms, während c[] am Stack angelegt wird.