Penggunaan strtol yang Betul dengan Pengendalian Ralat
Aturcara C atau C berikut menukar rentetan kepada integer panjang, bergantung pada fakta bahawa strtol kembali NULL untuk penukaran yang berjaya. Walau bagaimanapun, apabila diberi nilai 55, ia gagal dengan mesej berikut:
./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55
Artikel ini meneroka cara mengesan ralat dalam strtol dengan betul dan menangani isu dalam program yang diberikan.
Pengendalian Ralat dalam strtol
Spesifikasi rasmi untuk strtol (dan fungsi berkaitan seperti strtoll) menyatakan bahawa:
Membetulkan Program
Dalam C, ralat daripada strtol boleh dikesan dengan menetapkan errno kepada sifar sebelum memanggil fungsi tersebut. Fungsi parseLong yang diubah suai di bawah mengikut pendekatan 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) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }
Dalam C , pendekatan yang lebih fleksibel ialah mengembalikan penunjuk kejayaan/kegagalan dan menyediakan fungsi berasingan untuk mengekstrak nilai yang ditukar:
Kesimpulan
Dengan pengubahsuaian ini, fungsi parseLong dengan betul mengendalikan ralat daripada strtol, membenarkan aplikasi untuk menentukan kejayaan atau kegagalan penukaran dan mengendalikan ralat dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Ralat Dengan Betul Apabila Menggunakan strtol dalam C dan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!