Maison > développement back-end > C++ > Dois-je convertir en « char non signé » avant d'utiliser « toupper() », « tolower() », etc. ?

Dois-je convertir en « char non signé » avant d'utiliser « toupper() », « tolower() », etc. ?

Linda Hamilton
Libérer: 2024-12-26 19:15:12
original
738 Les gens l'ont consulté

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

Dois-je convertir en caractère non signé avant d'appeler toupper(), tolower(), et al. ?

Cette question découle de la suggestion selon laquelle la conversion en caractère non signé char est nécessaire avant d'appeler des fonctions de manipulation de caractères comme std::toupper et std::tolower. Cependant, le code de Bjarne Stroustrup semble utiliser ces fonctions sans conversion.

Représentation des caractères

Les caractères signés et non signés sont des types distincts en C . Char peut représenter une plage équivalente à un caractère signé ou à un caractère non signé. Dans les systèmes où char est signé, l'ensemble du jeu de caractères a des valeurs non négatives.

Fonction toupper

Selon la norme C, toupper accepte un argument int et renvoie un résultat int. La valeur d'entrée doit être représentable sous forme de caractère non signé ou égale à EOF. Sinon, le comportement est indéfini.

Comportement non défini

Si plain char est signé et que la valeur transmise à topper est négative, un comportement indéfini se produit. En effet, la conversion implicite en int donne une valeur négative.

Conversion en caractère non signé

La conversion de l'argument char en caractère non signé garantit que la valeur n'est pas négative. , en évitant un comportement indéfini. Même si les caractères et les caractères non signés ont la même taille, ils représentent des plages de valeurs différentes.

Implémentation

Ces fonctions sont généralement implémentées à l'aide de tables de recherche. L'indexation au-delà des limites de la table peut conduire à un comportement indéfini. La conversion directe en caractère non signé n'évite pas ce problème si le résultat est implicitement reconverti en une valeur négative.

Exception : EOF

Les fonctions dans doit accepter EOF (-1) comme argument. Cette valeur n'est pas représentable en tant que caractère non signé, mais topper est requis pour la gérer.

Modifications C

Le standard C ne modifie que certaines fonctions de la bibliothèque standard C, et aucun ajustement n'a été apporté aux fonctions dans .

Conclusion

Pour éviter un comportement indéfini, il est nécessaire de convertir l'argument char en unsigned char avant d'appeler topper, tolower ou similaire fonctions, même si char est un type signé non négatif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal