2015-11-04 41 views
1
  • 參數:數 - 數要轉換爲字符串
  • 基地 - 你的numebr轉換爲
    • 返回基地:數在基地的 「基地」 字符串
    • 返回類型:字符*

這是我的代碼,但它無法正常工作;將數字轉換從給定的基本爲十進制

char *toBase(int number, int base) { 
    char *result=malloc(80); 
    char *ans=malloc(80); 
    int i=0,j,c; 
    while(number != 0) { 
     result[i] = number % base; 
     number = number/base; ++i; 
    } 
    for(j=i-1;j>=0;j--) { 
     if(result[j]>=10 && result[j]<=24) { 
      printf("%c",(result[j]+55)); 
      *ans++=(result[j]+55); 
     } else { 
      printf("%d",(result[j])); 
      *ans++=(result[j]); 
     } 
    } 
    return ans; 
} 
+0

我加的printf語句來檢查它是否是工作或不。 printf語句給了我正確的答案,但是當函數被調用時我什麼也沒有得到。 – max

+1

當添加一個數字,你應該說'* ANS ++ =結果[J] +「0」;'來得到一個數字的字符表示。因爲您正在添加代碼爲0到9的字符,這些字符通常是不可打印的控制字符。 (這可能是將尋找合適的數字表示到一個單獨的函數是個好主意。) –

+0

你也應該在最後一個循環後,空終止'ans'。 –

回答

2

的問題是,您修改環路ans指針,所以當您返回ans它不再指向字符串的開頭,而不是它指向哪裏,你應該終止字符串。

使用初始化爲同一個臨時變量爲ans,並返回您不要修改的一個。

還應該注意的是,你有一個內存泄漏,你爲result分配內存,但你永遠不會free它在任何地方。

+0

我通過使用初始化爲與ans相同的臨時變量來得到它。非常感謝。 – max

1

你的問題是在數字轉換成文本

嘗試添加「0」和「A」 resectively的價值,

if(result[j]>=10 && result[j]<=24) { 
     printf("%c",(result[j]+'A')); 
     *ans++=(result[j]+'A'); 
    } else { 
     printf("%c",(result[j]+'0')); 
     *ans++=(result[j]+'0'); 
    } 

,並確保空終止字符串返回它,就像

*ans++ = 0; 

而且前 - 聲明

return ans; 

將返回字符串的結束,而不是開始 - 所以你必須要解決這個問題爲好,而引起的修復您的內存泄漏....

+0

我通過不添加'A'或'0'來得到答案。 – max

+0

當然 - 你正在添加55,它和'7'一樣 - 這對於Base函數來說是一個很奇怪的事情,但也許這是你對函數的要求。你沒有使用像'0'和'A'這樣的適當的符號值來保存任何東西,它們只是字節值(不是字符串),值爲48和65 - 但它們使你的代碼更易於讀取下一代看着你的代碼。 – Soren

+0

哦,謝謝你的建議。我會牢記這一點 – max

相關問題