Es mēģinu noskaidrot, vai ir alternatīvs veids, kā C valodā pārvērst virkni veselos skaitļos.
Manā kodā regulāri ir šāds modelis.
char s[] = "45";
int num = atoi(s);
Tātad, vai ir kāds labāks vai cits veids?
Ir strtol
, kas IMO ir labāks. Man ir iepatikies arī strtonum
, tāpēc, ja jums tas ir, izmantojiet to (bet atcerieties, ka tas nav portatīvs):
long long
strtonum(const char *nptr, long long minval, long long maxval,
const char **errstr);
Jūs varētu interesēt arī strtoumax
un strtoimax
, kas ir C99 standarta funkcijas. Piemēram, jūs varētu teikt:
uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
/* Could not convert. */
Jebkurā gadījumā turieties tālāk no atoi
:
Izsaukums atoi(str) ir līdzvērtīgs:
(int) strtol(str, (char **)NULL, 10)
izņemot to, ka kļūdu apstrāde var atšķirties. Ja vērtība nevar būt attēlot, uzvedība ir nenoteikta.
Neizmantojiet funkcijas no ato...
grupas. Tās ir bojātas un praktiski nederīgas. Mēreni labāks risinājums būtu izmantot sscanf
, lai gan arī tas nav ideāls.
Lai pārvērstu virkni veselos skaitļos, jāizmanto strto...
grupas funkcijas. Jūsu konkrētajā gadījumā tā būtu strtol
funkcija.