如果輸入被賦予一個像344565786464675345這樣的大數字,我仍然得到輸出,因爲char的範圍是256,所以它應該不會超過這個數字,爲什麼char可以存儲這樣的大整數?C中的數據類型(字符)
int main()
{
char b[30];
scanf("%s",b);
printf("\n%s",b);
return 0;
}
如果輸入被賦予一個像344565786464675345這樣的大數字,我仍然得到輸出,因爲char的範圍是256,所以它應該不會超過這個數字,爲什麼char可以存儲這樣的大整數?C中的數據類型(字符)
int main()
{
char b[30];
scanf("%s",b);
printf("\n%s",b);
return 0;
}
你有什麼是30
char
陣列,而不是一個單一的char
-
char b[30]; //b is an array of char
所以b
的大小是30*sizeof(char)
。這意味着它可以容納30
個字符(包括'\0'
)。你的輸入存儲在這個字符數組中(足以提供輸入),因此你可以得到正確的輸出。
char b[30];
b是一個數組,最多可以存儲30個字符。
至於
scanf("%s",b);
您輸入18個字符
344565786464675345
空字符\0
已追加到你,因爲%s
符,這使得總共有19的輸入的內容響應字符。或者
b[18]='\0' // Remember the count starts from 0
因此,您的數組中仍然有11個空閒字節,作爲字符是1個字節的b
。
請注意,如果您嘗試在數組中存儲字符串,則該數組將被終止,即您需要在字符數組末尾有一個\0
,以便將該組視爲字符串。
因此,從技術上講,您可以使用char b[30]
爲最多29個字符的字符串創建一個有效的字符串。
char
和char
s之間有一個區別,這就是你所擁有的。
一個數組能夠存儲多達29位數加上空終止符,但是您輸入的值是而不是存儲爲大整數。相反,它被存儲爲一個字符序列,其中每個字符表示一個單位:
Index of b[] 0 1 2 3 4 5 6 7 8 ...
char value '3' '4' '4' '5' '6' '5' '7' '8' '6' ...
num value 51 52 52 53 52 53 54 55 54 ...
的所有字符都在可以由單一char
來表示的範圍內的數值。
如果B是小於10^250的整數我們可以存儲這個整數作爲字符str [256] @dasblinkenlight –
@AryamanTodkar是的,即使我們使用'char's來表示它的十進制數字,我們可以將它存儲。 – dasblinkenlight
謝謝我知道了@dasblinkenlight –
您輸入了一個字符串,而不是字符 –
不安全的代碼警報 –
有一些建立了處理大數字的建立良好的庫(https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software )。也許你想在重新發明輪子之前查看諸如GMP之類的東西。因爲在這個問題之後(你得到一個巨大的整數),你可能會發現自己問如何減去,加或乘... –