Dalam program C yang diberikan, penggunaan strtol kelihatan seperti ia menggunakan fakta bahawa penukaran rentetan ke panjang yang berjaya harus meninggalkan parameter kedua (endptr) sama dengan NULL untuk menentukan ralat. Walau bagaimanapun, mesej ralat yang dipaparkan menunjukkan bahawa ini tidak selalu berlaku.
Pendekatan yang betul untuk pengesanan ralat dalam strtol melibatkan beberapa langkah:
1. Tetapkan errno kepada 0: Fungsi perpustakaan C standard tidak menetapkan errno kepada 0, jadi melakukannya secara manual sebelum memanggil strtol memastikan bahawa sebarang ralat yang dihadapi akan ditunjukkan dalam errno.
2. Semak Keputusan Penukaran: Jika strtol mengembalikan 0 atau LONG_MIN/LONG_MAX dengan errno ditetapkan kepada ERANGE, ini menunjukkan ralat dalam penukaran atau nilai di luar julat.
3. Bezakan Jenis Ralat: Dalam sesetengah kes, anda mungkin perlu membezakan antara jenis ralat tertentu, seperti sarap tertinggal atau format angka yang tidak sah. Ini boleh dicapai dengan menyemak kedudukan endptr dan nilai ralat dalam errno.
Berikut ialah versi semakan fungsi parseLong:
static long parseLong(const char *str) { char *temp; errno = 0; // Reset errno long val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // Handle errors by returning a specific value like 0 } return val; }
Fungsi ini mengembalikan 0 sekiranya berlaku ralat, sambil mengembalikan nilai yang ditukar jika berjaya.
Pendapat utama daripada analisis ralat ini adalah dengan menggunakan pendekatan pengendalian ralat menyeluruh yang melibatkan penetapan errno, menyemak hasil penukaran dan membezakan jenis ralat. Ini memastikan kod yang mantap dan boleh dipercayai apabila bekerja dengan penukaran rentetan kepada angka.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Ralat Dengan Betul Apabila Menggunakan Fungsi `strtol` C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!