2014-01-30 50 views
1

我想第一次寫我自己的va_args函數,我遇到一個問題,大整數(仍在int範圍內)被截斷爲3位數,訂購!va_arg只返回我的整數部分

下面是實現

void __sprintf(char * _string, ...) 
{ 
    int i = a_sizeof(_string); char _arg; int j =0; int format = 0; 
    va_list args; 
    va_start (args,_string); 
    for(; j < i; j++) 
    { 
    if(_string[j] == '\0') 
     break; 
    else if(_string[j] == '%') 
    { 
     format=1; 
     continue; 
    } 
    else if(format==1) 
    { 
     switch(_string[j]) 
     { 
     case 'd': 
     _arg = va_arg(args,int); 
     printi(_arg); //Prints integers over serial by converting to ASCII 
     break; 

     default: 
     continue; 

     } 
     format = 0; 
    } 
    else 
     SerialPutChar(_string[j]); 
    } 
    va_end(args); 

} 

我能得到什麼,當我嘗試__sprintf("%d %d %d\n",32141,6400,919911);141 32然後退出。我已經設置了斷點,有時它看起來像我得到總廢話通過。

猜疑: IAR的實現stdarg頭文件 完整的骨頭誤用的va_arg 的缺失精細打印的細節(這可能是粗體14pt,但沒有一個人無論如何讀取它)提前

謝謝!

+0

嘗試刪除'va_start'及其參數列表之間的空格。 – Palec

回答

3

您已聲明char _arg而不是int _arg,因此「截斷」 的整數值。

+0

+1好眼睛。或者你有皮棉警告嗎? – chux

+0

哇......多數民衆贊成在尷尬! – Andros