strtol ("string-to-long" kısaltması) işlevi dizge dizgesinin baştarafını bir işaretli tamsayıya dönüştürür ve sonucu long int türünde bir değer olarak döndürür.
İşlev dizge'yi şu şekilde analiz etmeye çalışır:
Boşluk karakterlerinden oluşan bir dizge (muhtemelen boş). Boşluk karakterleri
isspace işlevi ile saptanır ve bunlar iptal edilir (bkz.
Karakterlerin Sınıflandırılması).
İsteğe bağlı artı ya da eksi işareti (+ veya -).
Tabanı taban ile belirtilen aralarında boşluk olmayan rakamlar.
taban sıfırsa, rakam dizgesi 0 (sekizlik taban belirtir) ile ya da 0x veya 0X (onaltılık taban belirtir)ile başlamıyorsa rakamların onluk tabanda verildiği varsayılır; yani C'deki tamsayı sabit sözdizimi kullanılır.
Aksi takdirde taban, 2 ile 36 arasında olmalıdır. Eğer taban olarak 16 verilmişse, rakam dizgesi isteğe bağlı olarak 0x veya 0X ile başlayabilir. Eğer taban olarak kuraldışı bir değer belirtilmişse 0l değeri dömer ve errno değişkenine EINVAL atanır.
Dizgede kalan karakterler. Eğer kalan-dizge bir boş gösterici değilse işlev bu artıkları *kalan-dizge içine yerleştirir.
Eğer dizge boşsa, sadece boşluk karakterleri içeriyorsa ya da başlangıçtaki altdizge taban ile belirtilen bir tamsayı için umulan sözdizimine sahip değilse hiçbir dönüşüm yapılmaz. Bu durumda, işlev sıfırla döner ve dizge değeri *kalan-dizge içine yerleştirir.
Yerel, standart "C" yerelinden farklıysa, bu işlev gerçeklemeye bağlı olarak ek sözdizimini tanıyabilir.
Eğer dizge geçerli sözdizimine sahip olduğu halde taşmadan dolayı değer gösterilemiyorsa, değerin işaretine bağlı olarak
LONG_MAX ya da
LONG_MIN döner (bkz.
Bir Tamsayı Türün Aralığı). Ayrıca taşmayı belirtmek üzere
errno değişkenine
ERANGE atanır.
strtol işlevinin döndürdüğü değere bakarak hata sınaması yapmayın, çünkü dizge 0l, LONG_MAX veya LONG_MIN gibi sözdizimsel olarak geçerli bir sayı olabilir. Bunun yerine kalan-dizge'nin gösterdiği dizgenin sayıdan sonra umduğunuz dizgeyi içerip içermediğine bakın. Örneğin dizge sayıdan sonra başka bir karakter içermiyorsa dönüş değerinde '\0' varlığına bakarsınız. Ayrıca çağrı öncesi errno değişkenine sıfır atayıp çağrıdan sonra değişkenin değerine bakarak taşma durumu olup olmadığını saptayabilirsiniz.
Bu bölümün sonunda bir örnek bulacaksınız.