strtoul(3)

NUME
strtoul, strtoull, strtouq - convertește un șir de caractere într-un întreg lung fără semn

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <stdlib.h>

unsigned long strtoul(const char *restrict nptr,
                      char **_Nullable restrict endptr, int bază);
unsigned long long strtoull(const char *restrict nptr,
                      char **_Nullable restrict endptr, int bază);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

strtoull():
    _ISOC99_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

DESCRIERE
Funcția strtoul() convertește partea inițială a șirului din nptr într-o valoare unsigned long în funcție de baza dată, care trebuie să fie cuprinsă între 2 și 36 inclusiv, sau să fie valoarea specială 0.

Șirul poate începe cu o cantitate arbitrară de spațiu alb (determinată de isspace(3)), urmată de un singur semn opțional „+” sau „-”. Dacă bază este zero sau 16, șirul poate include apoi un prefix „0x”, iar numărul va fi citit în baza 16; în caz contrar, o bază zero este considerată ca fiind 10 (zecimal), cu excepția cazului în care următorul caracter este „0”, caz în care este considerat ca fiind 8 (octal).

Restul șirului este convertit într-o valoare unsigned long în mod evident, oprindu-se la primul caracter care nu este o cifră validă în baza dată; (în bazele mai mari de 10, litera „A”, fie cu majusculă, fie cu minusculă, reprezintă 10, „B” reprezintă 11, și așa mai departe, „Z” reprezentând 35).

Dacă endptr nu este NULL, iar baza este acceptată, strtoul() stochează adresa primului caracter nevalid în *endptr. În cazul în care nu au existat deloc cifre, strtoul() stochează valoarea originală a nptr în *endptr (și returnează 0). În special, dacă *nptr nu este „\0”, dar **endptr este „\0” la returnare, întregul șir este valid.

Funcția strtoull() funcționează la fel ca funcția strtoul(), dar returnează o valoare unsigned long long.

VALOAREA RETURNATĂ
Funcția strtoul() returnează fie rezultatul conversiei, fie, în cazul în care a existat un semn minus, negația rezultatului conversiei, reprezentat ca o valoare fără semn, cu excepția cazului în care valoarea originală (fără semn) ar fi depășită; în acest din urmă caz, strtoul() returnează ULONG_MAX și configurează errno la ERANGE. Exact același lucru este valabil și pentru strtoull() (cu ULLONG_MAX în loc de ULONG_MAX).

ERORI-IEȘIRE
Această funcție nu modifică errno în caz de succes.

EINVAL
    (nu în C99) baza dată conține o valoare neacceptată.

ERANGE
    Valoarea rezultată a fost în afara intervalului.

Implementarea poate, de asemenea, să stabilească errno la EINVAL în cazul în care nu a fost efectuată nicio conversie (nu se vede nicio cifră și se returnează 0).

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
strtoul(), strtoull(), strtouq() | Siguranța firelor | MT-Safe locale

VERSIUNI
În alte configurații regionale decât „C”, pot fi acceptate și alte șiruri; (de exemplu, poate fi acceptat separatorul de mii din configurația regională curentă).

BSD are de asemenea

    u_quad_t strtouq(const char *nptr, char **endptr, int base);

cu o definiție complet analoagă. În funcție de dimensiunea cuvintelor din arhitectura curentă, acest lucru poate fi echivalent cu strtoull() sau cu strtoul().

STANDARDE
C11, POSIX.1-2008.

ISTORIC

strtoul()
    POSIX.1-2001, C89, SVr4.

strtoull()
    POSIX.1-2001, C99.

PRECAUȚII
Deoarece strtoul() poate returna în mod legitim 0 sau ULONG_MAX (ULLONG_MAX pentru strtoull()) atât în caz de succes, cât și în caz de eșec, programul apelant ar trebui să stabilească errno la 0 înainte de apel, iar apoi să determine dacă s-a produs o eroare verificând dacă errno are o valoare diferită de zero după apel.

Valorile negative sunt considerate intrări valide și sunt convertite în mod silențios în valoarea echivalentă unsigned long.

EXEMPLE
A se vedea exemplul de pe pagina de manual strtol(3); utilizarea funcțiilor descrise în această pagină de manual este similară.

CONSULTAȚI ȘI
a64l(3), atof(3), atoi(3), atol(3), strtod(3), strtol(3), strtoumax(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.