2010-09-14 38 views
0

我有個碼,使用的sprintf將改變指定變量

char* bin2hexchar(const unsigned char& ibin, char* pbcd) 
{ 
    sprintf(pbcd, "%02X", ibin); 

    return pbcd; 
} 

問題是,ibin變量的值將改變到零值。

請指教。

感謝

+4

這不是C代碼,因爲'ibin'是一個參考。 – 2010-09-14 04:13:53

+0

謝謝,我編輯爲C++標記。 – domlao 2010-09-14 04:15:43

回答

11

如果您ibin正在改變在來電者給這個函數零值,最可能的解釋是緩衝區溢出。

我懷疑這可能是因爲你正在傳遞的第二個參數緩衝區被這樣定義:

char buff[2]; 

ibin爲與其相鄰的堆棧。

%02X格式字符串需要三個字節,兩個字符和一個用於終止NUL字符。

即使那不是的具體情況,它仍然幾乎肯定是緩衝區溢出。如果是這樣,請發佈調用此函數的代碼以及相關變量的定義。

+0

優秀的心靈調試! – Kip 2010-09-14 04:15:33

+0

是的,緩衝區只有兩個字節,謝謝。 – domlao 2010-09-14 05:17:19