Kako pretvoriti niz v celo število v jeziku C?

Poskušam ugotoviti, ali obstaja alternativni način pretvorbe niza v celo število v jeziku C.

V svoji kodi redno uporabljam naslednji vzorec.

char s[] = "45";

int num = atoi(s);

Torej, ali obstaja boljši ali drug način?

Rešitev

Obstaja strtol, ki je IMO boljši. Prav tako mi je všeč strtonum, zato ga uporabite, če ga imate (vendar ne pozabite, da ni prenosljiv):

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

EDIT

Morda vas bosta zanimali tudi funkciji strtoumax in strtoimax, ki sta standardni funkciji v jeziku C99. Na primer lahko rečete:

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

Vsekakor se izogibajte atoi:

Klic atoi(str) je enakovreden:

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

razen tega, da se obravnava napak lahko razlikuje. Če vrednosti ni mogoče predstaviti, je obnašanje nedefinirano.

Komentarji (7)

Ne uporabljajte funkcij iz skupine ato.... Te so pokvarjene in praktično neuporabne. Sorazmerno boljša rešitev bi bila uporaba funkcije sscanf, čeprav tudi ta ni popolna.

Za pretvorbo niza v celo število uporabite funkcije iz skupine strto.... V vašem primeru bi bila to funkcija strtol.

Komentarji (3)

Da, celotno število lahko shranite neposredno:

int num = 45;

Če morate analizirati niz, bo atoi ali strol zmagal na tekmovanju za "najkrajšo kodo".

Komentarji (2)