Sto cercando di scoprire se c'è un modo alternativo per convertire le stringhe in numeri interi in C.
Ho regolarmente il seguente modello nel mio codice.
char s[] = "45";
int num = atoi(s);
Quindi, c'è un modo migliore o un altro modo?
C'è strtol
che è migliore IMO. Inoltre ho preso in simpatia strtonum
, quindi usalo se ce l'hai (ma ricorda che non è portatile):
long long
strtonum(const char *nptr, long long minval, long long maxval,
const char **errstr);
Potreste anche essere interessati a strtoumax
e strtoimax
che sono funzioni standard in C99. Per esempio potreste dire
uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
/* Could not convert. */
Comunque, stai lontano da atoi
:
La chiamata atoi(str) è equivalente a:
(int) strtol(str, (char **)NULL, 10)
tranne che la gestione degli errori può differire. Se il valore non può essere rappresentato, il comportamento è indefinito.
Non usare le funzioni del gruppo ato...
. Queste sono rotte e praticamente inutili. Una soluzione moderatamente migliore sarebbe quella di usare sscanf
, anche se non è perfetta.
Per convertire una stringa in un numero intero, si dovrebbero usare le funzioni del gruppo strto...
. Nel tuo caso specifico sarebbe la funzione strtol
.