[英]C - Inputting string into an int variable?
在以下代碼中,
#include <stdio.h>
int main()
{
int i = 5;
scanf("%s", &i);
printf("%d\n", i);
return 0;
}
我將輸入字符串存儲在i
的地址中。 當我嘗試打印變量i
,我得到了一些數字。
輸入示例:
hello
輸出:
1819043176
這是什么數字,到底發生了什么?
該程序將從用戶讀取的字符串寫入變量i占用的內存中,並傳遞給它。 由於這是未定義的行為,所以可能會發生任何事情。
實際上發生的是,在您的計算機上int
的大小為4個char
,而字符“ hell”在轉換為ASCII並解釋為CPU字節順序的數字時,實際上是數字1819043176。其余部分字符串中的字母,字母o和結尾的nul字符超出了i在您的計算機上存儲的末尾。 那么scanf
作用是:
h e l l o \0
|68 65 6c 6c|6f 00 ...
| i|memory past i
您似乎是在低位字節序的計算機上運行此程序的,因此,當將字節68 65 6c 6c
存儲到int中時,它將被解釋為數字0x6c6c6568
或十進制1819043176
。
如果int
大小不同,或者機器使用了另一個字符集(例如EBCDIC而不是ASCII),或者CPU使用了大端字節序,或者如果程序在已對內存寫入進行綁定檢查的環境中運行,則可以會得到不同的結果或程序崩潰。 簡而言之,未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.