C'de dizeyi tamsayıya dönüştürmenin alternatif bir yolu olup olmadığını öğrenmeye çalışıyorum.
Kodumda düzenli olarak aşağıdaki örüntüyü kullanıyorum.
char s[] = "45";
int num = atoi(s);
Peki, daha iyi bir yol ya da başka bir yol var mı?
IMO'ya göre daha iyi olan strtol
vardır. Ayrıca strtonum
'den de hoşlanıyorum, eğer varsa onu kullanın (ancak taşınabilir olmadığını unutmayın):
long long
strtonum(const char *nptr, long long minval, long long maxval,
const char **errstr);
C99'da standart fonksiyonlar olan strtoumax
ve strtoimax
da ilginizi çekebilir. Örneğin şöyle diyebilirsiniz:
uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
/* Could not convert. */
Her neyse, "atoi "den uzak durun:
atoi(str) çağrısı şuna eşdeğer olacaktır:
(int) strtol(str, (char **)NULL, 10)
ancak hataların işlenmesi farklılık gösterebilir. Eğer değer temsil edildiğinde, davranış tanımsızdır.
ato...grubundaki işlevleri kullanmayın. Bunlar bozuk ve neredeyse işe yaramaz. Mükemmel olmasa da
sscanf` kullanmak kısmen daha iyi bir çözüm olacaktır.
Dizeyi tamsayıya dönüştürmek için strto...
grubundaki fonksiyonlar kullanılmalıdır. Sizin özel durumunuzda bu strtol
fonksiyonu olacaktır.