Dubbio funzione strtok

di il
5 risposte

Dubbio funzione strtok

Ciao a tutti, non ho capito di preciso come funziona la funzione strtok e nemmeno se nel mio caso sia utile usarla: data una stringa in input del tipo “parolarandom 2  10 11” dove 2 indica il numero di numeri che seguono, dovrei essere in grado di salvare quei due numeri come interi

ho scritto queste righe di codice, il problema e' che nel ciclo while fa meno cicli del dovuto e che per qualche ragione sembra  che strtok a volte restituisca null

char *input;
res=(fgets(buffer,1000,pfile);
input=strtok(res, " ");

        if (strncmp(input, "parolarandom", 10) == 0) {
                quantinumeridevoleggere = atoi(strtok(NULL, " "));
                while(input!=NULL) {
                    numeroletto = atoi(strtok(NULL, " "));
                    //inserisco in una lista il numero letto 
                    input= strtok(NULL, " ");
                }
        }

5 Risposte

  • Re: Dubbio funzione strtok

    Forse perché richiami due volte la funzione strtok(NULL, " ") dentro il ciclo.

    Prova in questo modo:

    input= strtok(NULL, " ");
    while(input!=NULL) {
           numeroletto = atoi(input));
           //inserisco in una lista il numero letto 
           input= strtok(NULL, " ");
           }
  • Re: Dubbio funzione strtok

    Scusa se rispondo dopo tanto: ho pensato che io so di preciso quanti numeri devo leggere quindi ho scritto una cosa di questo tipo. Non riesco a capire come mai, ma a un certo punto anche se la stringa da leggere non e' finita, strtok restituisce null. Ad esempio se deve leggere i primi dieci numeri da 1 a 10 legge i primi 7 e poi mi restituisce null null null

    input=strtok(stringa, " ");
    numletto=atoi(strtok(NULL, " ")); //perche' il numero da leggere non e' la prima 
    							//parola ma la seconda
    
    for(int i=0; i<numletto; i++){
    
    	numero=atoi(strtok(NULL, " "));
    
    }
  • Re: Dubbio funzione strtok

    Non capisco il problema. Puoi mostrare con quale stringa di input stai lavorando?

    Ovvero la variabile stringa cosa contiene esattamente e cosa vuoi ottenere?

    Nell'ipotesi che la stringa contenga quello che hai detto nel primo post, allora basta

        char stringa[] = "parolarandom 2 10 11";
       
       char *input = strtok(stringa, " ");
       int numletto = atoi(strtok(NULL, " "));
       printf("Parola iniziale %s\n", input); 
       printf("Numero di valori %d\n\n", numletto);
       for (int i = 0; i < numletto; i++) {
           int numero = atoi(strtok(NULL, " "));
           printf("Numero %d\n", numero);
       }

    Oppure col tuo codice

    
        if (strncmp(input, "parolarandom", 10) == 0) {
           int quantinumeridevoleggere = atoi(strtok(NULL, " "));
           printf("Numeri da leggere %d\n", quantinumeridevoleggere);
           while(quantinumeridevoleggere--) {
               int numeroletto = atoi(strtok(NULL, " "));
               printf("Numero letto %d\n", numeroletto);
           } 
       }
    
  • Re: Dubbio funzione strtok

    Scusami, alla fine ho risolto, facevo un errore imbarazzantemente stupido nel modo in cui prendevo da input la stringa

    Grazie mille comunque!

  • Re: Dubbio funzione strtok

    Devi sempre fare il debugging prima di scrivere nel forum

Devi accedere o registrarti per scrivere nel forum
5 risposte