我用 C 語言撰寫了一個簡單的代碼,它接受一個 ASCII 十進制值并回傳與輸入的十進制對應的 char 值。例如,65 將列印出“A”。
int x;
printf("Enter an ASCII number: ");
scanf_s("%d", &x);
printf("Entered letter is: %c\n", x);
但是,如果我將第 1 行從 更改int x
為char x
,程式將遇到運行時檢查失敗 #2 說明當我使用 x = 65 測驗程式時,變數 x 周圍的堆疊已損壞。我知道如果我超出范圍,通常會發生這種情況已分配記憶體,但 65 仍應在 char 的記憶體限制之內。為什么會這樣?
uj5u.com熱心網友回復:
通過使用scanf_s("%d", &x);
,您告訴 c 掃描%d
型別的十進制整數 () int
,并將其存盤在 a 中char
。因為 anint
是 4 個位元組,而 a 是char
1 個位元組,所以您在 char 之外寫入,從而破壞了周圍的記憶體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507339.html
標籤:C
上一篇:我想知道在C中如何使用雙引號