Come convertire una stringa in un numero intero in C?

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?

Soluzione

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);

EDIT

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.

Commentari (7)

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.

Commentari (3)

Sì, potete memorizzare direttamente l'intero:

int num = 45;

Se devi analizzare una stringa, atoi o strol vinceranno il "concorso per il codice più breve".

Commentari (2)