Fungsi strtol menukar perwakilan rentetan integer panjang kepada nilai panjang. Walau bagaimanapun, adalah penting untuk memahami cara mengendalikan ralat dengan betul apabila menggunakan fungsi ini.
Dalam kod yang diberikan, masalah timbul disebabkan oleh andaian yang salah. Kod ini bergantung pada fakta bahawa jika strtol berjaya menukar rentetan, parameter kedua harus sama dengan NULL. Walau bagaimanapun, andaian ini mungkin tidak selalunya benar.
Untuk mengesan ralat secara berkesan daripada strtol, adalah perlu mengikut garis panduan pengendalian ralat yang betul:
Berikut ialah versi semakan fungsi parseLong yang mematuhi prinsip ini:
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val) { errno = 0; char *temp; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) { return false; } return true; }
Sebagai alternatif, untuk memisahkan pengendalian ralat daripada hasil penukaran, antara muka yang diubah suai boleh digunakan:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan strtol dengan Betul untuk Menukar Rentetan kepada Integer Panjang dan Mengendalikan Ralat Berpotensi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!