Rumah > pembangunan bahagian belakang > C++ > Patutkah saya Hantar ke `unsigned char` Sebelum Menggunakan `toupper()`, `tolower()`, dsb.?

Patutkah saya Hantar ke `unsigned char` Sebelum Menggunakan `toupper()`, `tolower()`, dsb.?

Linda Hamilton
Lepaskan: 2024-12-26 19:15:12
asal
738 orang telah melayarinya

Should I Cast to `unsigned char` Before Using `toupper()`, `tolower()`, etc.?

Adakah Saya Perlu Hantar ke Unsigned Char Sebelum Memanggil toupper(), tolower(), et al.?

Soalan ini berpunca daripada cadangan menghantar ke unsigned char diperlukan sebelum memanggil fungsi manipulasi aksara seperti std::toupper dan std::tolower. Walau bagaimanapun, kod Bjarne Stroustrup nampaknya menggunakan fungsi ini tanpa menghantar.

Char Representation

Char, signed char dan unsigned char ialah jenis yang berbeza dalam C . Char mungkin mewakili julat yang setara dengan char yang ditandatangani atau char yang tidak ditandatangani. Dalam sistem di mana char ditandatangani, keseluruhan set aksara mempunyai nilai bukan negatif.

Fungsi topper

Menurut standard C, topper menerima hujah int dan mengembalikan hasil int. Nilai input mesti boleh diwakili sebagai aksara tidak bertanda atau sama dengan EOF. Jika tidak, tingkah laku itu tidak ditentukan.

Tingkah Laku Tidak Ditakrifkan

Jika char biasa ditandatangani dan nilai yang dihantar kepada toupper adalah negatif, tingkah laku tidak ditentukan berlaku. Ini kerana penukaran tersirat kepada int menghasilkan nilai negatif.

Menghantar ke Unsigned Char

Menghantar hujah char ke unsigned char memastikan nilai tersebut bukan negatif , mengelakkan tingkah laku yang tidak ditentukan. Walaupun char dan unsigned char mempunyai saiz yang sama, ia mewakili julat nilai yang berbeza.

Pelaksanaan

Fungsi ini biasanya dilaksanakan menggunakan jadual carian. Pengindeksan melebihi had jadual boleh membawa kepada tingkah laku yang tidak ditentukan. Menukar kepada aksara yang tidak ditandatangani secara langsung tidak mengelakkan isu ini jika hasilnya secara tersirat ditukar kembali kepada nilai negatif.

Pengecualian: EOF

Fungsi dalam mesti menerima EOF (-1) sebagai hujah. Nilai ini tidak boleh diwakili sebagai aksara tidak bertanda, tetapi toupper diperlukan untuk mengendalikannya.

Pengubahsuaian C

Piawaian C hanya mengubah suai fungsi perpustakaan standard C tertentu dan tiada pelarasan pada fungsi dalam .

Kesimpulan

Untuk mengelakkan tingkah laku yang tidak ditentukan, adalah perlu untuk menghantar argumen char kepada unsigned char sebelum memanggil toupper, tolower atau yang serupa berfungsi, walaupun char ialah jenis bertanda bukan negatif.

Atas ialah kandungan terperinci Patutkah saya Hantar ke `unsigned char` Sebelum Menggunakan `toupper()`, `tolower()`, dsb.?. 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