Definito nell'intestazione
longstrtol(constchar*str,char**str_end,int base );
(fino al C99)
longstrtol(constchar*restrict str,char**restrict str_end,int base );
(dal C99)
longlongstrtoll(constchar*restrict str,char**restrict str_end,int base );
(dal C99)

Interpreta un valore intero in una stringa di byte puntata da str.

Scarta qualsiasi carattere di spazio bianco (come identificato dalla chiamata a isspace()) fino a quando non viene trovato il primo carattere non whitespace, quindi prende il maggior numero di caratteri possibile per formare una stringa valida base-n (dove n=base) e li converte in un valore intero. Il valore intero valido è composto dalle seguenti parti:

  • (opzionale) segno più o meno
  • (opzionale) prefisso (0) che indica la base ottale (si applica solo quando la base è 8 o ​0​)
  • (opzionale) prefisso (0x o 0X) che indica la base esadecimale (si applica solo quando la base è 16 o ​0​)
  • una sequenza di cifre

L'insieme dei valori validi per la base è {0,2,3,...,36}. L'insieme di cifre valide per i numeri interi in base 2 è {0,1}, per i numeri interi in base 3 è {0,1,2e così via. Per basi maggiori di 10, le cifre valide includono i caratteri alfabetici, a partire da Aa per i numeri interi in base 11, fino a Zz per i numeri interi in base 36. Il caso dei caratteri viene ignorato.

Altri formati numerici possono essere accettati dal sistema C attualmente installato. locale.

Se il valore della base è ​0​, la base numerica viene rilevata automaticamente: se il prefisso è 0la base è ottale, se il prefisso è 0x o 0X, la base è esadecimale, altrimenti la base è decimale.

Se il segno meno faceva parte della sequenza di input, il valore numerico calcolato dalla sequenza di cifre viene negato come se fosse un segno meno unario nel tipo di risultato.

La funzione imposta il puntatore a cui punta str_end per puntare al carattere successivo all'ultimo carattere interpretato. Se str_end è NULLviene ignorato.

Se il valore str è vuoto o non ha la forma prevista, non viene eseguita alcuna conversione e (se str_end non è NULL) il valore di str è memorizzato nell'oggetto puntato da str_end.

Parametri

str - puntatore alla stringa di byte null-terminated da interpretare
str_end - puntatore a un puntatore a carattere.
base - base del valore intero interpretato

Valore di ritorno

  • In caso di successo, un valore intero corrispondente al contenuto di str viene restituito.
  • Se il valore convertito non rientra nell'intervallo del tipo di ritorno corrispondente, si verifica un errore di intervallo (impostazione errno a ERANGE) e LONG_MAX, LONG_MIN, LLONG_MAX o LLONG_MIN viene restituito.
  • Se non è possibile eseguire la conversione, ​0​ viene restituito.

Esempio

#include#include#includeintmain(void){// parsing with error handlingconstchar*p ="10 200000000000000000000000000000 30 -40 junk";printf("Parsing '%s':n", p);char*end;for(long i =strtol(p,&end,10);
         p != end;
         i =strtol(p,&end,10)){printf("'%.*s' -> ",(int)(end-p), p);
        p = end;if(errno == ERANGE){printf("range error, got ");
            errno =0;}printf("%ldn", i);}// parsing without error handlingprintf(""1010" in binary  --> %ldn",strtol("1010",NULL,2));printf(""12" in octal     --> %ldn",strtol("12",NULL,8));printf(""A"  in hex       --> %ldn",strtol("A",NULL,16));printf(""junk" in base-36 --> %ldn",strtol("junk",NULL,36));printf(""012" in auto-detected base  --> %ldn",strtol("012",NULL,0));printf(""0xA" in auto-detected base  --> %ldn",strtol("0xA",NULL,0));printf(""junk" in auto-detected base -->  %ldn",strtol("junk",NULL,0));}

Uscita:

Parsing '10 200000000000000000000000000000 30 -40 junk':'10'->10' 200000000000000000000000000000'-> range error, got 9223372036854775807' 30'->30' -40'->-40"1010" in binary  -->10"12" in octal     -->10"A"  in hex       -->10"junk" in base-36-->926192"012" in auto-detected base  -->10"0xA" in auto-detected base  -->10"junk" in auto-detected base -->0

Riferimenti

  • Norma C11 (ISO/IEC 9899:2011):
    • 7.22.1.4 Le funzioni strtol, strtoll, strtoul e strtoull (p: 344-345)
  • Standard C99 (ISO/IEC 9899:1999):
    • 7.20.1.4 Le funzioni strtol, strtoll, strtoul e strtoull (p: 310-311)
  • Norma C89/C90 (ISO/IEC 9899:1990):
    • 4.10.1.5 La funzione strtol

Vedi anche

atoiatolatollo(C99) converte una stringa di byte in un valore intero
(funzione)
strtoul strtoull(C99) converte una stringa di byte in un valore intero senza segno
(funzione)
wcstolwcstoll(C95)(C99) converte una stringa larga in un valore intero
(funzione)
wcstoulwcstoull(C95)(C99) converte una stringa larga in un valore intero senza segno
(funzione)