揭開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中文網其他相關文章!