Maison > développement back-end > C++ > Pourquoi `cout` imprime-t-il des caractères inattendus lors de la gestion de `unsigned char` alors que `printf` ne le fait pas ?

Pourquoi `cout` imprime-t-il des caractères inattendus lors de la gestion de `unsigned char` alors que `printf` ne le fait pas ?

Patricia Arquette
Libérer: 2024-12-04 10:44:10
original
793 Les gens l'ont consulté

Why Does `cout` Print Unexpected Characters When Handling `unsigned char` While `printf` Doesn't?

Dévoilement du mystère derrière le comportement imprévisible de cout avec des caractères non signés

En programmation, une sortie inattendue peut souvent conduire à de la frustration et de la confusion. Considérons le code suivant :

#include<iostream>
#include<stdio.h>

using namespace std;

int main() {
    unsigned char a;
    a = 1;
    printf("%d", a);
    cout << a;
}
Copier après la connexion

Ce code est conçu pour imprimer la valeur stockée dans la variable char non signée 'a', qui est 1. Cependant, une fois exécuté, il imprime "1" suivi de quelques éléments apparemment personnages aléatoires. Pourquoi cout se comporte-t-il différemment de printf dans ce scénario ?

La réponse réside dans la nature du caractère non signé. Les caractères ASCII attribués aux valeurs 0 à 31 sont considérés comme non imprimables. Le caractère affecté à la valeur 1 est un caractère non imprimable, qu'il est de toute façon possible de tenter d'imprimer. Pour déterminer si un caractère est imprimable, vous pouvez utiliser la fonction std::isprint :

std::cout << std::isprint(a) << std::endl;
Copier après la connexion

Cette instruction affichera 0 (faux), indiquant que le caractère n'est pas imprimable.

Pour résoudre ce problème et forcer cout à imprimer la valeur de a comme 1, vous pouvez le convertir en un entier non signé :

cout << static_cast<unsigned>(a) << std::endl;
Copier après la connexion

Ceci cast convertit le caractère non imprimable en sa valeur entière non signée correspondante, garantissant que cout imprime 1 correctement.

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