Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengesan Ralat dengan Amanah Semasa Menukar Rentetan kepada Integer Panjang Menggunakan strtol dalam C?
Mengesan Ralat dalam Penukaran Rentetan ke Panjang Menggunakan strtol
Dalam pengaturcaraan C, fungsi strtol biasanya digunakan untuk menukar perwakilan rentetan sesuatu integer panjang kepada nilai berangkanya. Walau bagaimanapun, menggunakan strtol sahaja mungkin tidak selalu memberikan pengendalian ralat yang mencukupi.
Masalah:
Kod yang disediakan menunjukkan senario di mana atur cara menukar rentetan kepada integer panjang dengan betul , tetapi juga mencetak mesej ralat yang menyatakan "Tidak dapat menukar" walaupun penukaran berjaya. Ini kerana atur cara mengandaikan bahawa jika strtol berjaya menukar rentetan, parameter kedua (menunjukkan rentetan sisa) hendaklah NULL. Walau bagaimanapun, syarat tertentu boleh membawa kepada rentetan sisa bukan NULL walaupun dengan penukaran yang berjaya.
Penyelesaian:
Untuk mengesan ralat daripada strtol dengan tepat, pertimbangkan penambahbaikan berikut:
Fungsi Disemak:
bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">if (parseLong(str, &value)) // Conversion successful else // Handle error' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }
Penggunaan:
Fungsi yang disemak ini mengembalikan boolean kepada nyatakan sama ada penukaran berjaya atau tidak. Anda boleh menggunakannya seperti berikut:
Nota Tambahan:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengesan Ralat dengan Amanah Semasa Menukar Rentetan kepada Integer Panjang Menggunakan strtol dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!