首頁 >後端開發 >C++ >為什麼處理 `unsigned char` 時 `cout` 會印出意外的字符,而 `printf` 卻不會?

為什麼處理 `unsigned char` 時 `cout` 會印出意外的字符,而 `printf` 卻不會?

Patricia Arquette
Patricia Arquette原創
2024-12-04 10:44:10618瀏覽

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

揭開cout 使用unsigned char 的不可預測行為背後的秘密

在程式設計中,意外的輸出常常會導致沮喪和困惑。考慮以下程式碼:

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

using namespace std;

int main() {
    unsigned char a;
    a = 1;
    printf("%d", a);
    cout << a;
}

此程式碼旨在列印儲存在 unsigned char 變數 'a' 中的值,即 1。但是,在執行時,它會列印“1”,後面跟著一些看似隨機字元。為什麼在這種情況下 cout 的行為與 printf 不同?

答案在於 unsigned char 的本質。分配值 0 到 31 的 ASCII 字元被視為不可列印。分配給值 1 的字符是不可列印的字符,cout 無論如何都會嘗試列印該字符。若要確定某個字元是否可列印,可以使用 std::isprint 函數:

std::cout << std::isprint(a) << std::endl;

該語句將列印 0(假),表示該字元無法列印。

要解決此問題並強制cout 將a 的值打印為1,您可以將其轉換為無符號整數:

cout << static_cast<unsigned>(a) << std::endl;

這個cast 將不可打印的字符轉換為其對應的無符號整數值,確保cout 正確列印1。

以上是為什麼處理 `unsigned char` 時 `cout` 會印出意外的字符,而 `printf` 卻不會?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn