Új hozzászólás Aktív témák

  • pmonitor
    aktív tag

    Ezzel szerintem megint az lesz a baj, mint a korábbiakkal, azaz hogy a túl nagy vagy túl kicsi számokra is visszaad valami látszólag értelmes integert. Persze most megint visszatérhetünk oda, hogy az atoi() mit is kell visszaadjon invalid inputra. De a kódban látom az igyekezetet, hogy észrevegye a túlcsordulást. Ugyanakkor ezt úgy próbálja megtenni, hogy azt nézi, hogy az aktuális részösszeg 10-zel szorozva negatív lesz-e. De mi van pl. a 999999999x esetén? Az utolsó előtti számjegynél a részösszeg 999999999, ez 10-zel szorozva ugyan túlcsordul, de a túlcsordult érték pozitív lesz. Tehát nem veszi észre a túlcsordulást és visszaad valami random integert.

    Igen, észleltem én is a bugot(?). Módosítottam a C kódomat:
    if (ret < 0 || ret < tempret)

    És mindig elmentem a tempret-be a ret értékét. Így már sokkal több számra működik.

    >Persze most megint visszatérhetünk oda, hogy az atoi() mit is kell visszaadjon invalid inputra.

    Nagyon jól látod a problémát! Biztos, hogy jó az, hogy INT_MAX, vagy INT_MIN értékét adja vissza a túlcsordulásnál? Ha jól belegondolunk, akkor ez is memóriaszemét. Viszont valid számok esetén jóval gyorsabb ez a kód, mint az eredeti atoi().

Új hozzászólás Aktív témák