Pourquoi n'est-il pas strtoi dans stdlib.h?
J'ai pris l'habitude de strtod
et variantes.
Je me demande pourquoi il n'y a pas de strtoi livré avec stdlib.h.
Pourquoi est-ce que l'entier est à gauche de ce parti?
Plus précisément, je me demande pourquoi il n'y a pas une version de atoi avec les caractéristiques de sécurité de strtod.
- S'il vous plaît étiquette de strtoi
Vous devez vous connecter pour publier un commentaire.
strtol()
convertit une chaîne en un entier, entier long, mais un nombre entier, tout de même. Il estatoi()
mais il devrait être évité dans la plupart des cas en raison du fait qu'il manque un mécanisme de signalement d'erreurs de saisie de données incorrectes.long
dépasse la plage deint
,strtol()
ne permet pas de définirerrno
ni retourINT_MIN/MAX
surint
seulement de dépassement de la négation de la valeur de la fonction de sécurité.strtol()
lorsque vous tentez de convertir unint
, en soulignant que les chaînes de caractères qui représentent une valeur en dehors de laint
gamme, (mais paslong
) ne définissez paserrno
ni obtenir une valeur limitée. Ce comportement diffère de celui des chaînes de caractères qui représentent une valeur en dehors de lalong
gamme: ce qui ne seterrno
et d'obtenir une valeur limitée.strtol()
sont à éviter lors de la conversion deint
en raison du fait qu'il manque un mécanisme de signalement d'erreurs de saisie qui serait débordement d'unint
.Pas besoin critique.
Au début de C, il n'y a pas un standard type signé plus large que
long
et tous plus étroite conversions, commeint
, pourrait être fabriqué à partir destrtol()
- comme ci-dessous.L'OMI, de celles-ci et leur
unsigned
homologues sont maintenant disparus fonctions C et une conception faible de l'actuelle bibliothèque standard C.Sur de nombreux systèmes,
long
etint
ont la même gamme et donc il y a une réduction de la nécessité de séparer lesstrtoi()
. Aussi laatoi()
remplit le besoin pour une installation rapide et sale de code, mais de l'absence de détection d'erreur. Il n'est également pas unstrto_short()
nistrto_signchar()
, etc.Il est assez facile de créer un substitut
strtoi()
. Simplifications existent.strtonum()
ne permettent pas de fuite d'espace blanc comme cela aurait simplifié l'utilisation avecfgets()
.L'entier n'est pas en reste de la partie: il y a
strtol
, qui convertit une chaîne en unlong
, qui est un type entier.C'est ce que j'utilise.
Ne négligez pas la
SEE ALSO
section de votre manpages 🙂Vous êtes à la recherche pour
atoi(3)
. 🙂strto[u]l(3)
est mentionnée dans cetteSEE ALSO
!C'est l'appel
atoi
. Voir aussi Wikipédia pour plus de détails, y compris son successeurstrol
.atoi
ne doit pas être utilisé.atoi
retourne0
,INT_MIN
, ouINT_MAX
, vous n'avez aucun moyen de savoir si la conversion a réussi.atoi
est théoriquement presque aussi mauvais que l'utilisation degets
: à moins d'avoir un contrôle strict sur l'entrée, il en résulte la undefined behavior. Heureusement, la plupart des implémentations ne fait pas prendre cette liberté, etatoi
produit tout simplementunsigned
-comme habillage de débordement, mais vous ne devriez pas compter sur cela. Il suffit de ne pas utiliseratoi
.