Problem mit strtok

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
do6dm
Beiträge: 26
Registriert: Fr Jan 27, 2012 9:09 am

Problem mit strtok

Beitrag von do6dm » Mo Feb 06, 2012 11:15 am

Folgendes Programm funktioniert tadellos:

Code: Alles auswählen

int main(){
    char string[] = "Das ist das Haus vom Nikolaus.";
    char delimiter[] = "s ";
    char *ptr;
    
    ptr = strtok(string, delimiter);
    while(ptr != NULL) {
	printf("Abschnitt gefunden: %s\n", ptr);
	// naechsten Abschnitt erstellen
 	ptr = strtok(NULL, delimiter);
}


    system("PAUSE");
    return 0;
}
Warum funktioniert es nicht mehr, wenn ich statt: char string[] = "Das ist das Haus vom Nikolaus.";
char *string = "Das ist das Haus vom Nikolaus."; schreibe?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit strtok

Beitrag von Xin » Mo Feb 06, 2012 11:48 am

do6dm hat geschrieben:Warum funktioniert es nicht mehr, wenn ich statt: char string[] = "Das ist das Haus vom Nikolaus.";
char *string = "Das ist das Haus vom Nikolaus."; schreibe?
Weil "Das ist das Haus vom Nikolaus" ein konstantes (unveränderliches) Char-Array ist (char const []), das bei char string[] = ... kopiert wird.
Bei "char * string" wird der Zeiger auf das unveränderliche char-Array kopiert. Das Array ist aber ein (char const []), was als (char const *) akzeptiert wird, aber nicht als (char *). Auf Deutsch: Du kannst string, was ein Zeiger auf veränderliche chars ist keinen Zeiger auf unveränderliche Chars zuweisen.

Code: Alles auswählen

char const * string = "Das ist das Haus vom Nikolaus.";
Ansonsten bitte ich Dich folgendes zu lesen: http://www.proggen.org/doku.php?id=faq:frageformulieren

"Funktioniert nicht" funktioniert als Fehlerbeschreibung nur, wenn sich jemand findet, dem das Problem offensichtlich ist. Wenn Du die Fehlermeldung des Compilers nicht verstehst, kann sie aber demjenigen helfen, das Problem zu erkennen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Problem mit strtok

Beitrag von AnGaiNoR » Mo Feb 06, 2012 11:56 am

Xin hat geschrieben: "Funktioniert nicht" funktioniert als Fehlerbeschreibung nur, wenn sich jemand findet, dem das Problem offensichtlich ist. Wenn Du die Fehlermeldung des Compilers nicht verstehst, kann sie aber demjenigen helfen, das Problem zu erkennen.
Das Schöne ist ja, dass der Compiler keine Fehlermeldung ausspuckt, da die Zuweisung aus Abwärtskompabilitätsgründen (schönes Wort) durchaus noch erlaubt ist. Einfach als const zu deklarieren geht selbstverständlich auch in die Hose, denn strtok braucht ja einen veränderlichen String.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit strtok

Beitrag von Xin » Mo Feb 06, 2012 12:09 pm

AnGaiNoR hat geschrieben:
Xin hat geschrieben: "Funktioniert nicht" funktioniert als Fehlerbeschreibung nur, wenn sich jemand findet, dem das Problem offensichtlich ist. Wenn Du die Fehlermeldung des Compilers nicht verstehst, kann sie aber demjenigen helfen, das Problem zu erkennen.
Das Schöne ist ja, dass der Compiler keine Fehlermeldung ausspuckt, da die Zuweisung aus Abwärtskompabilitätsgründen (schönes Wort) durchaus noch erlaubt ist.
Aktuelle GCCs werfen soweit ich weiß Fehlermeldungen.
Bei Visual Studio bin ich mir nicht 100%ig sicher.

Ein Programmabsturz wäre allerdings eine legitime Fehlermeldung, die man erwähnen könnte. ;->
AnGaiNoR hat geschrieben:Einfach als const zu deklarieren geht selbstverständlich auch in die Hose, denn strtok braucht ja einen veränderlichen String.
Tatsache: Ich habe es bei der Beschreibung von strtok() sogar explizit hingeschrieben, wegen der eingefügten Nullbytes... :-/

Dann wird nichts anderes übrig bleiben, als den String zu kopieren.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Problem mit strtok

Beitrag von AnGaiNoR » Mo Feb 06, 2012 12:14 pm

Xin hat geschrieben: Aktuelle GCCs werfen soweit ich weiß Fehlermeldungen.
Meiner nicht. ^^ (4.6.1)
Xin hat geschrieben:Dann wird nichts anderes übrig bleiben, als den String zu kopieren.
Oder eben - wie's im Quelltext schon steht - die Variante mit dem Array nehmen, dann funktioniert's nämlich einwandfrei.
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Problem mit strtok

Beitrag von Xin » Mo Feb 06, 2012 12:16 pm

AnGaiNoR hat geschrieben:
Xin hat geschrieben: Aktuelle GCCs werfen soweit ich weiß Fehlermeldungen.
Meiner nicht. ^^ (4.6.1)
-Wall?
-pedantic?

Eben das, was man als akzeptabler Programmierer in der Grundausstattung anwirft?
AnGaiNoR hat geschrieben:
Xin hat geschrieben:Dann wird nichts anderes übrig bleiben, als den String zu kopieren.
Oder eben - wie's im Quelltext schon steht - die Variante mit dem Array nehmen, dann funktioniert's nämlich einwandfrei.
Hier wird das Array kopiert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

do6dm
Beiträge: 26
Registriert: Fr Jan 27, 2012 9:09 am

Re: Problem mit strtok

Beitrag von do6dm » Mo Feb 06, 2012 12:59 pm

Danke euch!
Also ich hab Dev-C++ 4.9.9.2, der sagt nix.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Problem mit strtok

Beitrag von Bebu » Mo Feb 06, 2012 1:33 pm

Dev-Cpp? Besorg dir mal einen aktuellen Compiler, wird schon lange nicht mehr weiterentwickelt. Früher oder später wirst du damit Probleme bekommen.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

AnGaiNoR
Beiträge: 212
Registriert: Sa Jul 19, 2008 7:07 pm
Wohnort: Dresden

Re: Problem mit strtok

Beitrag von AnGaiNoR » Mo Feb 06, 2012 2:00 pm

Xin hat geschrieben: -Wall?
-pedantic?
Die Idee ist mir zum schnell mal Ausprobieren gar nicht gekommen, aber Du hast natürlich recht. ^^
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)

Antworten