Problem mit strtok



  • Hallo

    char* String = "5+6+7+8-6-4";
    
    	const char Trennzeichen[] = "+-*/";
    
    	char* Token = strtok(String,Trennzeichen);
    

    Wenn ich mein Programm mit diesem Code ausführe, stürzt es wegen
    einer "Zugriffsverletzung beim Schreiben" ab.
    Wenn ich aber anstatt

    char* String
    
    char String[]
    

    schreibe,läuft es ohne Probleme.

    Das ist doch beides genau das gleiche. An was liegt das?

    Danke



  • char* String = "5+6+7+8-6-4";
    

    weißt ein read-only string zu. strtok muss aber schreiben können, da strtok damit sich die Position merkt, wo was geparst wurde. Mit

    char String[] = "5+6+7+8-6-4";
    

    wird ein Arrays der Größe strlen("5+6+7+8-6-4") + 1 angelegt und mit diesem String initialsiert, es ist kein read-only Speicher und funktioniert problemlos mit strtok.



  • Okay Danke erstmal.
    Jetz hab ich das gleiche Problem nur mit Token.

    void Auswerten(char String[])
    {
        char Trennzeichen[] = "+-*/";
        char* Token;
    
        Token = strtok(String, Trennzeichen);        /* erstes Token ermitteln */
        while(Token != NULL )
        {
            Token = strtok(NULL, Trennzeichen);       /* weitere Token ermitteln */
        }
    
    	//...
    }
    

    Was hab ich hier falsch gemacht?



  • wir rufst du Auswerten auf? Bestimmt mit einem konstanten String.

    man strstr schrieb:

    BUGS
    Avoid using these functions. If you do use them, note that:

    These functions modify their first argument.

    These functions cannot be used on constant strings.


Anmelden zum Antworten