strtol

STRTOL(3)                Linux Programmeurs Handleiding                STRTOL(3)



NAAM
       strtol, strtoll, strtoq - converteert een tekenreeks naar een lang geheel
       getal

SAMENVATTING
       #include <stdlib.h>

       long strtol(const char *restrict nptr,
                   char **restrict endptr, int base);
       long long strtoll(const char *restrict nptr,
                   char **restrict endptr, int base);

   Test Macro´s in glibc (zie feature_test_macros(7)):

       strtoll():
           _ISOC99_SOURCE
               || /* Glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

BESCHRIJVING
       De strtol()  functie converteert het initiële deel van een tekenreeks in
       nptr naar een lang geheel getal  met als grondtal als grondtal, welk moet
       liggen tussen 2 en 36 (inclusief deze grenzen), of de speciale waarde 0.

       De tekenreeks mag beginnen met een willekeurig aantal witruimtes (zoals
       bepaald door isspace(3)) gevolgd door een enkel optioneel teken '+' or
       '-'. Als het grondtal nul of 16 is, dan mag de string "0x" of "0X"
       bevatten en wordt het getal gelezen met 16 als grondtal; in andere
       gevallen zal het grondtal 0 geïnterpreteerd worden als 10 (decimaal)
       behalve als het volgende teken '0' is, in welk geval het geïnterpreteerd
       wordt als 8 (octaal).

       De rest van de tekenreeks zal geconverteerd worden naar een long waarde
       in de voor de hand liggende manier, eindigende bij het eerste ongeldige
       teken in het gekozen grondtal. (Grondtallen groter dan 10,
       vertegenwoordigd de letter 'A' in zowel hoofd- als kleine letter 10, 'B'
       vertegenwoordigd 11, en zo voorts, met 'Z' vertegenwoordigde 35.)

       Zodra endptr niet NULL is, zal strtol het adres van het eerste ongeldige
       teken in *endptr opslaan. Als er geen enkel cijfer was dan bewaart
       strtol() de originele waarde van nptr in *endptr (en geeft een 0 terug).
       In het bijzonder, als *nptr niet gelijk is aan '\0' maar **endptr is '\0'
       bij terugkeer, dan is de hele tekenreeks geldig.

       De strtoll()  functie werkt net als de strtol()  functie maar geeft een
       lang-lang gehele waarde terug.

EIND WAARDE
       De strtol() functie retourneert het resultaat van een conversie, behalve
       als de waarde resulteerde in een onder- of overloop. Als een onderloop
       optrad dan retourneert strtol() een LONG_MIN. Als een overloop optrad dan
       retourneert strtol() een LONG_MAX. In beide gevallen wordt errno gezet op
       ERANGE. Hetzelfde geldt voor  strtoll()  (met LLONG_MIN en LLONG_MAX in
       plaats van LONG_MIN en LONG_MAX).

FOUTEN
       EINVAL (niet in C99)  Het gegeven grondtal bevat een niet ondersteunde
              waarde.

       ERANGE De resulterende waarde was buiten bereik.

       De implementatie mag errno zetten op EINVAL in het geval dat er geen
       omzetting plaats vond (geen cijfers gezien en 0 geretourneerd).

ATTRIBUTEN
       Voor een uitleg van de termen in deze sectie, zie attributes(7).

       ┌───────────────────────────────┬───────────────────┬────────────────────┐
       │Interface                      Attribuut         Waarde             │
       ├───────────────────────────────┼───────────────────┼────────────────────┤
       │strtol(), strtoll(), strtoq()  │ Thread veiligheid │ MT-Safe taalgebied │
       └───────────────────────────────┴───────────────────┴────────────────────┘

VOLDOET AAN
       strtol(): POSIX.1-2001, POSIX.1-2008, C89, C99 SVr4, 4.3BSD.

       strtoll(): POSIX.1-2001, POSIX.1-2008, C99.

OPMERKINGEN
       Omdat strtol() legitiem 0,  LONG_MAX, of LONG_MIN (LLONG_MAX of LLONG_MIN
       voor strtoll()) kan retourneren bij zowel succes of falen, moet het
       aanroepende programma errno op 0 zetten voor de aanroep, en vervolgens
       bepalen of een fout optrad door te controleren of errno een niet-nul
       waarde heeft na de aanroep.

       Volgens POSIX.1, in taalgebieden anders dan "C" en "POSIX", mogen deze
       functies andere, implementatie afhankelijke numerieke tekenreeksen
       accepteren.

       BSD heeft ook

           quad_t strtoq(const char *nptr, char **endptr, int grondtal);

       met complete vergelijkbare definitie. Afhankelijk van de woordgrootte van
       de huidige architectuur, kan dit equivalent zijn aan strtoll() of aan
       strtol().

VOORBEELDEN
       Het hieronder getoonde programma demonstreert het gebruik van strtol().
       Het eerste argument op de commando regel bepaalt de tekenreeks waarvan
       strtol() het getal moet lezen. Het tweede (optionele) argument bepaalt
       het grondtal dat moet worden gebruikt voor de conversie. (Dit argument
       wordt geconverteerd naar een numerieke vorm door gebruik te maken van
       atoi(3), een functie die niet op fouten controleert en een eenvoudige
       interface heeft dan strtol().) Een aantal voorbeelden van de resultaten
       geproduceerd door dit programma zijn de volgende:

           $ ./a.out 123
           strtol() returned 123
           $ ./a.out '    123'
           strtol() returned 123
           $ ./a.out 123abc
           strtol() returned 123
           Further characters after number: "abc"
           $ ./a.out 123abc 55
           strtol: Invalid argument
           $ ./a.out ''
           No digits were found
           $ ./a.out 4000000000
           strtol: Numerical result out of range

   Programma bron

       #include <stdlib.h>
       #include <limits.h>
       #include <stdio.h>
       #include <errno.h>

       int
       main(int argc, char *argv[])
       {
           int base;
           char *endptr, *str;
           long val;

           if (argc < 2) {
               fprintf(stderr, "Usage: %s str [base]\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           str = argv[1];
           base = (argc > 2) ? atoi(argv[2]) : 0;

           errno = 0;    /* To distinguish success/failure after call */
           val = strtol(str, &endptr, base);

           /* Check for various possible errors. */

           if (errno != 0) {
               perror("strtol");
               exit(EXIT_FAILURE);
           }

           if (endptr == str) {
               fprintf(stderr, "No digits were found\n");
               exit(EXIT_FAILURE);
           }

           /* If we got here, strtol() successfully parsed a number. */

           printf("strtol() returned %ld\n", val);

           if (*endptr != '\0')        /* Not necessarily an error... */
               printf("Further characters after number: \"%s\"\n", endptr);

           exit(EXIT_SUCCESS);
       }

ZIE OOK
       atof(3), atoi(3), atol(3), strtod(3), strtoimax(3), strtoul(3),

COLOFON
       Deze pagina is onderdeel van release 5.13 van het Linux
       man-pages-project. Een beschrijving van het project, informatie over het
       melden van bugs en de nieuwste versie van deze pagina zijn op
       https://www.kernel.org/doc/man-pages/ te vinden.


VERTALING
       De Nederlandse vertaling van deze handleiding is geschreven door Mario
       Blättermann <mario.blaettermann@gmail.com> en Luc Castermans
       <luc.castermans@gmail.com>

       Deze vertaling is vrije documentatie; lees de GNU General Public License
       Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ of later over de
       Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.

       Indien U fouten in de vertaling van deze handleiding zou vinden, stuur
       een e-mail naar debian-l10n-dutch@lists.debian.org ⟨⟩.



GNU                               22 maart 2021                        STRTOL(3)