簡體   English   中英

C-將字符串輸入到int變量中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM