problem mit strtok



  • ich bekomm gleich die krise. Dieser Code funktioniert problemlos:

    ptr = strtok(cFunktionen[k][0], "\\ \n\0");
    while(ptr != NULL)
    {
        printf("%s\n", ptr);
        ptr = strtok(NULL, "\\ \n\0");
    }
    

    beim nächsten Code aber gibt strtok schon beim 2. Durchlauf NULL zurück, und nicht wie beim ersten beispiel erst nach 5 durchläufen.

    ptr = strtok(cFunktionen[k][0], "\\ \n\0");
    			while(1)
    			{
    				while(ptr != NULL) 				{
    					if(strcmp(ptr, cFunktionen[i + iZaehler]) != 0)
    					{
    						printf("ausgelöst %s %s\n", ptr, cFunktionen[i + iZaehler]);
    						break;
    					}
    					printf("%s %s\n", ptr, cFunktionen[i + iZaehler]);
    					ptr = strtok(NULL, "\\ \n\0");
    					if(ptr != NULL)
    						printf("test");
    					iZaehler++;
    
    				}
    
    //weiterer Code
    }
    

    ich gluab ich hab gerade ein brett vorm kopf.
    kann mir jemand sagen warum strtok so unterschiedlich reagiert.



  • neo47 schrieb:

    beim nächsten Code aber gibt strtok schon beim 2. Durchlauf NULL zurück, und nicht wie beim ersten beispiel erst nach 5 durchläufen.

    Dann steht in deinem Ausgangsstring beim 2. Mal was anderes drin als beim 1. oder du arbeitest mit Multithreads.
    strtok jedenfalls arbeitet fehlerfrei.



  • ich habs gelöst, der Fehler war: ich habe cFunktionen[k][0] mehrmals mit strtok durchlaufen, dabei werden natürlich alle trennzeichen durch \0 ersetzt und so kommt beim 2. durchlauf eben immer nur der erste teil des Strings, da dann wieder \0 kommt. ich dacht strtok verändert den string nicht dauerhaft.


Log in to reply