Namespaces
Variants

strtoul, strtoull

From cppreference.net
< c ‎ | string ‎ | byte
Défini dans l'en-tête <stdlib.h>
unsigned long strtoul ( const char * str, char ** str_end,
int base ) ;
(jusqu'à C99)
unsigned long strtoul ( const char * restrict str, char ** restrict str_end,
int base ) ;
(depuis C99)
unsigned long long strtoull ( const char * restrict str, char ** restrict str_end,
int base ) ;
(depuis C99)

Interprète une valeur entière non signée dans la chaîne d'octets pointée par str .

Ignore tous les caractères d'espacement (identifiés en appelant isspace ) jusqu'au premier caractère non-espace, puis prend autant de caractères que possible pour former une représentation valide d'un nombre entier non signé en base-n (où n= base ) et les convertit en une valeur entière. La valeur entière non signée valide se compose des parties suivantes :

  • (optionnel) signe plus ou moins
  • (optionnel) préfixe ( 0 ) indiquant la base octale (s'applique uniquement lorsque la base est 8 ou 0 )
  • (optionnel) préfixe ( 0x ou 0X ) indiquant la base hexadécimale (s'applique uniquement lorsque la base est 16 ou 0 )
  • une séquence de chiffres

L'ensemble des valeurs valides pour la base est {0, 2, 3, ..., 36} . L'ensemble des chiffres valides pour les entiers en base 2 est {0, 1} , pour les entiers en base 3 est {0, 1, 2} , et ainsi de suite. Pour les bases supérieures à 10 , les chiffres valides incluent des caractères alphabétiques, commençant par Aa pour les entiers en base 11 , jusqu'à Zz pour les entiers en base 36 . La casse des caractères est ignorée.

Des formats numériques supplémentaires peuvent être acceptés par la locale C actuellement installée.

Si la valeur de base est 0 , la base numérique est auto-détectée : si le préfixe est 0 , la base est octale, si le préfixe est 0x ou 0X , la base est hexadécimale, sinon la base est décimale.

Si le signe moins faisait partie de la séquence d'entrée, la valeur numérique calculée à partir de la séquence de chiffres est niée comme si par un moins unaire dans le type de résultat, ce qui applique les règles de bouclage des entiers non signés.

Les fonctions définissent le pointeur pointé par str_end pour pointer vers le caractère suivant le dernier caractère interprété. Si str_end est un pointeur nul, il est ignoré.

Table des matières

Paramètres

str - pointeur vers la chaîne d'octets terminée par un caractère nul à interpréter
str_end - pointeur vers un pointeur de caractère, pouvant être positionné après le dernier caractère interprété
base - base de la valeur entière interprétée

Valeur de retour

Valeur entière correspondant au contenu de str en cas de succès. Si la valeur convertie dépasse la plage du type de retour correspondant, une erreur de plage se produit ( errno est défini à ERANGE ) et ULONG_MAX ou ULLONG_MAX est renvoyé. Si aucune conversion ne peut être effectuée, 0 est renvoyé.

Exemple

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char* p = "10 200000000000000000000000000000 30 -40 - 42";
    printf("Parsing '%s':\n", p);
    char* end = NULL;
    for (unsigned long i = strtoul(p, &end, 10);
         p != end;
         i = strtoul(p, &end, 10))
    {
        printf("'%.*s' -> ", (int)(end - p), p);
        p = end;
        if (errno == ERANGE)
        {
            errno = 0;
            printf("range error, got ");
        }
        printf("%lu\n", i);
    }
    printf("After the loop p points to '%s'\n", p);
}

Sortie :

Parsing '10 200000000000000000000000000000 30 -40 - 42':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 18446744073709551615
' 30' -> 30
' -40' -> 18446744073709551576
After the loop p points to ' - 42'

Références

  • Norme C23 (ISO/IEC 9899:2024):
  • 7.24.1.7 Les fonctions strtol, strtoll, strtoul et strtoull (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.22.1.4 Les fonctions strtol, strtoll, strtoul et strtoull (p: 251-252)
  • Norme C11 (ISO/CEI 9899:2011) :
  • 7.22.1.4 Les fonctions strtol, strtoll, strtoul et strtoull (p: 344-345)
  • Norme C99 (ISO/CEI 9899:1999) :
  • 7.20.1.4 Les fonctions strtol, strtoll, strtoul et strtoull (p: 310-311)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.10.1.6 La fonction strtoul

Voir aussi

(C95) (C99)
convertit une chaîne large en une valeur entière non signée
(fonction)
convertit une chaîne d'octets en une valeur entière
(fonction)
convertit une chaîne d'octets en une valeur entière
(fonction)
Documentation C++ pour strtoul