我已经为矢量类型实现了printf
。向量类型中的值表示为(element1,element2,...)例如,对于大小为3的向量,可能的值可以是(1,2,3)
我对printf
的实施是:
int my_printf(const char *format,...)
{
va_list args;
int argSize = 1; // get the number of elemts in vector
const char* vec;
vec = strchr(format,'v');
if(vec != NULL)
argSize = atol(vec + 1);
va_start (args, format);
int i = 0,ret = 0;
do // print all elements
{
ret = vprintf ("%d ", args);
fflush(stdout);
va_arg(args,float);
} while(i < argSize);
va_end (args);
return ret;
}
int main()
{
my_printf("v3",(10,12,13));
return 0;
}
当va_start (args, format);
args获得值13时,打印它,接下来的两次打印打印0(args = 0)
可能是什么解决方案?
答案 0 :(得分:5)
(10,12,13)
代表单个数字13.它是comma operator,是C语言的一个非常特殊的功能。
所以你的代码等同于:
int temp = (10,12,13); // now temp == 13
my_printf("v3", temp);
在C中,没有从C ++中知道的矢量类型。只有阵列。您可以像这样初始化数组:
int array[] = {10, 12, 13};
- 并将数组用作my_printf
的参数。