va_arg只返回我整数的部分内容

时间:2014-01-30 19:56:46

标签: c integer stm32 iar variadic-functions

我正在尝试第一次编写自己的va_args函数,我遇到的问题是大整数(仍在int范围内)被截断为3位数,并且无序!

这是实施

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,但无论如何都没有人读取)

提前致谢!

1 个答案:

答案 0 :(得分:3)

您已声明char _arg而不是int _arg,因此“截断” 整数值。