2012-11-14 16 views
6

Quando non sto chiamando la stessa funzione nel mio codice tutto funziona bene, ma quando la funzione ritorna da una ricorsione improvvisamente la variabile pch è NULL:c strtok restituisce NULL dopo il ritorno dalla ricorsione

void someFunction() 
    { 
     char * pch; 
     char tempDependencies[100*64+100]; 
     strcpy(tempDependencies,map[j].filesNeeded); 
     pch = strtok(tempDependencies,","); 
     while (pch != NULL) 
     { 
      someFunction(); <- if i comment this out it works fine 
      pch = strtok (NULL, ","); 
     } 
     } 

Così, per Quando il loop agisce sulla stringa file2,file3,file4, si divide correttamente file2 e modifica la stringa in file2\\000file3,file4 ma la chiamata successiva a pch = strtok (NULL, ","); esegue il rendering di pch in 0x0. Ci sono cose di cui non sono a conoscenza quando si chiama la ricorsione?

risposta

11

strtok() non rientrante. Se si desidera utilizzarlo in una funzione ricorsiva, è necessario utilizzare strtok_r().

Consulta anche: strtok, strtok_r

5

Non è possibile chiamare di nuovo la funzione strtok prima dell'esecuzione precedente è fatto - Non è reentrant.

Utilizzare invece la sua versione di rientro strtok_r.

Problemi correlati