Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menangani Ralat Dengan Teguh Apabila Menggunakan strtol untuk Menukar Rentetan kepada Integer Panjang?
Mengendalikan Ralat dengan strtol
Fungsi strtol menukar rentetan kepada integer panjang. Walaupun ia berguna untuk mengekstrak data berangka daripada rentetan, ia boleh menjana ralat jika penukaran tidak berjaya.
Memahami Gelagat strtol
strtol menguraikan rentetan input kepada tiga bahagian: aksara ruang putih, integer yang diwakili dalam radix tertentu (biasanya 0 untuk perlapanan, 10 untuk perpuluhan, atau 16 untuk perenambelasan), dan mana-mana aksara yang tidak dikenali. Jika perwakilan integer tidak sah atau rentetan mengandungi aksara yang tidak dikenali, tiada penukaran dilakukan.
Pengesanan Ralat
Untuk mengesan ralat dengan strtol dengan betul, adalah penting untuk menetapkan errno kepada sifar sebelum memanggil fungsi. Ini memastikan bahawa sebarang ralat akan menetapkan errno kepada nilai bukan sifar. Selepas percubaan penukaran, anda boleh menyemak nilai errno. Jika ia bukan sifar, ralat telah berlaku.
Mengubah suai Fungsi parseLong
Untuk menambah baik pengendalian ralat, pertimbangkan untuk mengubah suai fungsi parseLong anda seperti berikut:
static long parseLong(const char *str) { errno = 0; char *temp; 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; // or LONG_MIN/LONG_MAX depending on error } return val; }
Pengubahsuaian ini memastikan fungsi mengembalikan sifar atau nilai panjang minimum/maksimum jika ralat berlaku, memberikan maklumat lanjut tentang ralat itu.
Pertimbangan Tambahan
Keadaan ralat lain yang mungkin anda ingin semak termasuk:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangani Ralat Dengan Teguh Apabila Menggunakan strtol untuk Menukar Rentetan kepada Integer Panjang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!