在下面這段代碼中,我輸入了一個字串,但將其轉換為整數并列印出來。
int main ()
{
int v6[4] 。
printf ("輸入一個字串:")。
int i = scanf ("%s", v6);
printf ("%d",v6[0]) 。
return 0;
輸出:
輸入一個字串: tom
7171956。
它實際做了什么?
它實際做了什么?
uj5u.com熱心網友回復:
采取你的答案
7171956
將其轉換為十六進制
。0x6d6f74
檢查一個ascii表格
mot
你已經在記憶體中填入了tom的ascii表示,然后你把它讀成一個整數,并考慮到位元組順序。
uj5u.com熱心網友回復:
這可能是發生在這里。(假設int在你的平臺上是一個32位型別):
int v6[4]在記憶體中需要16位元組。
在你用tom作為輸入的scanf之后,v6的前n個位元組看起來像這樣。(x是一個未確定的值)。
----- ----- ----- ----- ----- ----- ----- ----- ----
| 't' | 'o' | 'm' | 0 | x | x | x | x | ...
----- ----- ----- ----- ----- ----- ----- ----- ----
同樣的事情在十六進制中(0x74是字母 "t "的ASCII代碼,等等):
----- ----- ----- ----- ----- ----- ----- ----- ----
| 74 | 6F | 6D | 0 | x | x | x | ...
----- ----- ----- ----- ----- ----- ----- ----- ----
值0x6d6f74(也就是v6[0])轉換為十進制是7171956。
請注意,在big endian(google該術語)架構上,v[0]將是0x746f6d00。
但是不要做這種事情,這是未定義的行為(也可以用谷歌搜索)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/307860.html
標籤:
