新数据类型(向量)的 printf 实现
我已经为向量类型实现了 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) 解决办法是什么?
I have implemented printf
for vector type. The values in vector type are represented as (element1,element2,...) For example for vector of size 3, a possible value could be (1,2,3)
My implementation for printf
is:
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;
}
While va_start (args, format);
args gets value 13 prints it and for the next two printings prints 0 (args = 0)
What could be the solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
(10,12,13)
代表单个数字 13。它是 逗号运算符,C语言中相当奇特的特性。所以你的代码相当于这样:
在 C 中,没有 C++ 中已知的向量类型。只有数组。您可以像这样初始化数组:
-- 并将该数组用作
my_printf
的参数。(10,12,13)
represent the single number 13. It's comma operator, quite peculiar feature of C language.So your code is equivalent to this:
In C, there is no vector type as it's known from C++. There are only arrays. You could initialize array like this:
--and use the array as an argument for
my_printf
.