Heim >Backend-Entwicklung >C++ >Warum druckt „cout' bei der Verarbeitung von „unsigned char' unerwartete Zeichen, während „printf' dies nicht tut?
Enthüllung des Geheimnisses hinter couts unvorhersehbarem Verhalten mit unsigned char
Beim Programmieren können unerwartete Ausgaben oft zu Frustration und Verwirrung führen. Betrachten Sie den folgenden Code:
#include<iostream> #include<stdio.h> using namespace std; int main() { unsigned char a; a = 1; printf("%d", a); cout << a; }
Dieser Code dient dazu, den in der vorzeichenlosen char-Variablen „a“ gespeicherten Wert auszugeben, der 1 ist. Bei der Ausführung gibt er jedoch „1“ aus, gefolgt von etwas scheinbarem zufällige Zeichen. Warum verhält sich cout in diesem Szenario anders als printf?
Die Antwort liegt in der Natur von unsigned char. ASCII-Zeichen mit den Werten 0 bis 31 gelten als nicht druckbare. Das dem Wert 1 zugewiesene Zeichen ist ein nicht druckbares Zeichen, das ohnehin zu drucken versucht. Um festzustellen, ob ein Zeichen druckbar ist, können Sie die Funktion std::isprint verwenden:
std::cout << std::isprint(a) << std::endl;
Diese Anweisung gibt 0 (falsch) aus, was angibt, dass das Zeichen nicht druckbar ist.
Um dieses Problem zu beheben und cout zu zwingen, den Wert von a als 1 auszugeben, können Sie ihn in eine vorzeichenlose Ganzzahl umwandeln:
cout << static_cast<unsigned>(a) << std::endl;
Diese Umwandlung wandelt das nicht druckbare Zeichen in den entsprechenden vorzeichenlosen Ganzzahlwert um und stellt so sicher, dass cout 1 korrekt ausgibt.
Das obige ist der detaillierte Inhalt vonWarum druckt „cout' bei der Verarbeitung von „unsigned char' unerwartete Zeichen, während „printf' dies nicht tut?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!