Funzione strtol in c

di il
6 risposte

Funzione strtol in c

Ciao ragazzi, per n=16
cosa fa questa istruzione??
n = strtol (argv[1],NULL,10)

6 Risposte

  • Re: Funzione strtol in c

    Qualsiasi cosa faccia, n verrà sovrascritto
  • Re: Funzione strtol in c

    Ciao
    la funzione converte una stringa in un intero lungo.
    per maggiori dettagli vediti questo link
    http://www.cplusplus.com/reference/cstdlib/strtol
  • Re: Funzione strtol in c

    Che n sia uguale a 16 prima dell'esecuzione, non è importante, quindi chiarisci perché non ha senso che tu lo dica.
  • Re: Funzione strtol in c

    N = strtol (argv[1],NULL,10) pone in n un valore numerico di tipo long int ricavato convertendo una stringa C contenuta in argv[1] (che si spera contenga una rappresentazione in formato stringa di un numero a base 10).

    Di solito, per verificare che la lettura e conversione della stringa abbia avuto successo, si passa un puntatore a char* al posto di NULL. La conversione si considera riuscita se il puntatore ottenuto è diverso da quello alla prima stringa. Ad esempio...
    char stringa[] = "1250";
    char *fine;
    
    long int n = strtol( stringa, &fine, 10 );
    
    if( fine != stringa )
        // lettura e conversione sono riuscite ed n contiene il valore letto (1250)
    else
        // lettura e conversione non sono riuscite ed n (se ben ricordo) contiene 0
    
    // comunque sia, fine punta al carattere al quale e' stata interrotta la lettura
  • Re: Funzione strtol in c

    Si ho capito che strtol mi converte una stringa in formato integer, però non ho capito cosa fà il programma;
    il programma completo è il seguente:

    01 int a;
    02
    03 int f (int b)
    04 {
    05 for (int i=1; i<b; i=2*i) {
    06 int a;
    07 a = a + i;
    08 }
    09 return a;
    10 }
    11
    12 main ()
    13 {
    14 int n, i;
    15 n = strtol(argv[1],NULL,10);
    16
    17 a = 5;
    18
    19 for (i=0; i<n; i++)
    20 a = a + f(i);
    21
    22 printf("ris = %d\n",a);
    23 }
  • Re: Funzione strtol in c

    #include <stdlib.h>
    #include <stdio.h>
    
    int a;
    
    int f( int b ) {
        for (int i=1; i<b; i=2*i) {
            int a;  // "maschera" la variabile globale
                    // dichiarandone una locale con lo stesso nome
                    // che ha come area di visibilita' solo il
                    // blocco "for" compreso tra le graffe
    
            a = a + i;  // questo ha effetto sulla variabile locale,
                        // per cui la variabile globale rimane "intatta"
        }
    
        return a; // restituisce il valore della variabile globale, "intatto"
    }
    
    int main( int argc, char *argv[] ) {
        int n, i;
    
        // ricava un dato numerico dalla linea di comando
        n = strtol( argv[1], NULL, 10 );
    
        a = 5; // imposta la variabile globale a sul valore 5
    
        // avvia un ciclo che si ripete tante volte quante
        // sono state richieste tramite la linea di comando
    
        for( i=0; i<n; i++ )
            a = a + f(i); // fa un po' di giochetti per dimostrare
                          // come si comportano le variabili globali;
                          // in base a quei giochetti l'effetto di questa
                          // riga è fare sempre a = a + a, perche' la
                          // funzione f() restituisce sempre e comunque il
                          // valore della variabile globale a
    
        printf( "ris = %d\n", a ); // stampa il valore della variabile globale a
    
        return 0;
    }
Devi accedere o registrarti per scrivere nel forum
6 risposte