[英]Why does a question mark appears in the output of my function and how can I avoid it?
[英]Why does this C function produce a Question Mark
在這個將正數 integer 轉換為另一個基數的程序中,如果我輸入看似無害的數字,則將我的數字轉換為基數123
會產生一個問號。 關於為什么會發生這種情況的任何想法? 我會發帖
int main(void){
const char baseDigits[16] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F', };
int convertedNumber [64];
long int numberToConvert;
int nextDigit, base, index = 0;
//Get the number and base
printf("Number to be converted? ");
scanf ("%ld", &numberToConvert);
printf("Base? ");
scanf("%i", &base);
//convert to the indicated base
do {
convertedNumber[index]=numberToConvert % base;
++index;
numberToConvert = numberToConvert / base;
}
while (numberToConvert != 0);
//display the results in reverse order
printf("Converted Number = ");
for (--index; index >=0; --index){
nextDigit = convertedNumber[index];
printf("%c", baseDigits[nextDigit]);
}
printf("\n");
return 0;
}
終端 output
Number to be converted? 3513
Base? 123
Converted Number
=?
問題是你的baseDigits
數組只有 16 位數字,所以最多只支持 16 進制。如果你使用更大的基數,當你 go 打印一個數字時,表達式baseDigit[nextDigit]
將在 nextDigit 時訪問數組的末尾>= 16。這給出了未定義的行為,但通常只會讀取數組末尾后那個位置的 memory 中的任何字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.