285 votes

Conversion de chaîne en entier C

J’essaie de savoir si il existe un autre moyen de conversion de chaîne en entier en C.

Je fais régulièrement ce qui suit dans mon code.

Oui, y a-t-il un court trajet ou une autre façon

207voto

cnicutar Points 98451

Il est strtol ce qui est mieux IMO. J'ai aussi pris goût en strtonum, afin de l'utiliser si vous en avez (mais rappelez-vous, il n'est pas portable):

long long
     strtonum(const char *nptr, long long minval, long long maxval,
     const char **errstr);

MODIFIER

Vous pourriez également être intéressé en strtoumax et strtoimax , qui sont la norme. Par exemple, vous pourriez dire:

uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
    /* Could not convert. */

De toute façon, rester à l'écart de atoi:

L'appel atoi(str) est équivalente à:

(int) strtol(str, (char **)NULL, 10)

sauf que la gestion des erreurs peuvent différer. Si la valeur ne peut pas être représentée, le comportement est indéfini.

32voto

Ciro Santilli Points 3341

``solution avec gestion des erreurs robuste. Basé sur la solution C++ de http://stackoverflow.com/a/6154614/895245

27voto

AndreyT Points 139512

Ne pas utiliser les fonctions de groupe. Ce sont cassées et pratiquement inutile. Une modérément la meilleure solution serait d’utiliser , mais c’est ne pas parfait ou l’autre.

Pour convertir la chaîne en entier, les fonctions de groupe doit être utilisé. Dans votre cas précis, il serait fonction.

7voto

jDourlens Points 1061

Vous pouvez coder atoi() un peu pour le fun :

Vous pouvez également le faire récursive wich can vieux en 3 lignes =)

-7voto

Yann Ramin Points 25139

Oui, vous pouvez stocker l’entier directement :

Si vous devez analyser une chaîne, ou va gagner un « minimum de code » concours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X