2011-10-31 98 views
0

我在調試別人的代碼之中,我有這樣的代碼奇怪的內存覆蓋問題

int i = their_val; 
std::cout << "output: " << i << std::endl; 

當我看到日誌輸出我看到像

output: a 

這是否應該發生?有什麼改變cout格式或可能是一些奇怪的東西?

+1

「導致整數變成十六進制數」是一個短語來思考......那些可憐的整數。 –

+0

正如下面的答案所指出的,前面的'std :: hex'導致了這個問題。看到此前的討論:http://stackoverflow.com/questions/1532640/which-iomanip-manipulators-are-sticky – Gnawme

回答

3

在輸出之前是否有人cout << std::hex?它會導致它以十六進制打印。

+0

我感覺有人應該使用'printf'而不是'std :: hex' ... –

+0

我認爲這可能是(upvoted),但它是一個足夠大的代碼庫,我無法立即找到它。我意識到這可能是剛剛提交後的情況... – invisiblerhino

3

檢查並看看std::hex是否被傳遞到std :: cout的任何地方。這會導致你看到的行爲。

您可以強制使用的東西要在十進制:

std::cout << "output: " << std::dec << i << std::endl; 
0

你可能沒有std::cout << std::hex地方更早。您可以使用std::cout << std::dec撤銷此操作。

std::cout << "output: " << std::dec << i << std::endl;