簡體   English   中英

為什么這個C function會產生一個問號

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

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