2
我有一個基於陣列uint16_t爲什麼不顯示所需的輸出?
uint8_t arrayTest[] = {
0, 0xC1,
0, 0, 0, 0x0a,
0, 0, 0, 0x50
};
所以下面的printf與uint32_t的顯示正確的輸出 「一個」:
printf("%x ",ntohl(*((uint32_t *)(arrayTest+2))));
但uint16_t沒有正確顯示它,雖然我轉發了數組指針兩個字段,輸出是「a0000」 -
printf("%x ",ntohl(*((uint16_t *)(arrayTest+4))));
當我使用%d是相同的:
隨着printf("%d ",ntohl(*((uint32_t *)(arrayTest+2))));
輸出爲 「」
隨着printf("%d ",ntohl(*((uint16_t *)(arrayTest+4))));
輸出爲 「」
爲什麼? ??
[通常的積分轉換](http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-7-of -n)... –
您在這裏調用**未定義的行爲**(通過這些指針轉換解除引用)。 –
'printf'不是一個安全的功能。使用它時請小心謹慎。這包括[*閱讀手冊*](http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html)。 –