2016-11-25 105 views
0

我正在使用Visual Studio 2015,並且在此環境上只有幾個月的使用經驗。我有一些C++和C的經驗。Visual Studio:觀察窗口:C++:爲什麼垃圾字符類型的成員?

當運行下面的代碼,並通過調試器的觀察窗口檢查tmp類的成員時,我可以看到值列上的char和unsigned char類型成員的一些垃圾。

我重視這個時候發生phenominoun手錶窗口的截屏。

enter image description here

例子:

clock_class 1 '\x1' unsigned char 
priority2 248 '・' unsigned char 
log_sync_interval -3 '' char 
log_announce_interval 0 '\0' char 

爲什麼出現這種情況? 這是Visual Studio的規範還是我的代碼有問題? 在我的理解,C++處理字符類型爲8位變量, 因此,我想知道爲什麼會發生這種情況。

------------------------------------------------------- 
Code: 

#include "stdafx.h" 
#include "stdint.h" 

struct test_class{ 
public: 
    uint16_t descriptor_index; 
    uint16_t localized_description; 
    uint64_t mac_address; 
    uint16_t interface_flags; 
    uint64_t clock_identity; 
    uint8_t priority1; 
    uint8_t clock_class; 
    uint16_t offset_scaled_log_variance; 
    uint8_t clock_accuracy; 
    uint8_t priority2; 
    uint8_t domain_number; 
    int8_t log_sync_interval; 
    int8_t log_announce_interval; 
    int8_t log_pdelay_interval; 
    uint16_t port_number; 
}; 

int main() 
{ 
    test_class * tmp = new test_class; 

    tmp->descriptor_index = 0; 
    tmp->localized_description = 65535; 
    tmp->mac_address = 0x22970405b7; 
    tmp->interface_flags = 0x7; 
    tmp->clock_identity = 0x2297fffe0405b7; 
    tmp->priority1 = 0; 
    tmp->clock_class = 1; 
    tmp->offset_scaled_log_variance = 17258; 
    tmp->clock_accuracy = 32; 
    tmp->priority2 = 248; 
    tmp->domain_number = 0; 
    tmp->log_sync_interval = -3; 
    tmp->log_announce_interval = 0; 
    tmp->log_pdelay_interval = 0; 
    tmp->port_number = 1; 

<- Break at here and watch members of tmp 

    delete tmp; 

    return 0; 
} 

------------------------------------------------------- 
+3

的值是正確的,內部'」「'的符號是該值代表CHARACT –

回答

1

uint8_t是無符號的字符類型的別名,可以(通常)存儲值從0到255這就是爲什麼在調試器顯示單引號之間的char值。或者試圖顯示這個值(數字)對應的字符。不是所有的值可以被打印爲字符和將顯示爲垃圾

for (uint8_t i = 0; i < 255; i++) 
{ 
    std::cout << uint8_t(i); 
} 
相關問題