Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menangani Ralat Dengan Teguh Apabila Menggunakan strtol untuk Menukar Rentetan kepada Integer Panjang?

Bagaimanakah Saya Boleh Menangani Ralat Dengan Teguh Apabila Menggunakan strtol untuk Menukar Rentetan kepada Integer Panjang?

Mary-Kate Olsen
Lepaskan: 2024-12-15 15:08:34
asal
603 orang telah melayarinya

How Can I Robustly Handle Errors When Using strtol to Convert Strings to Long Integers?

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;
}
Salin selepas log masuk

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:

  • Mengekori aksara sampah selepas perwakilan integer
  • rentetan angka tidak sah (cth., "abc")
  • Nilai terlalu besar atau terlalu kecil untuk jenis data yang panjang

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan