我正在尝试第一次编写自己的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,但无论如何都没有人读取)
提前致谢!
答案 0 :(得分:3)
您已声明char _arg
而不是int _arg
,因此“截断”
整数值。