我正在尝试编写printf的变体,其中正在打印的项和正在打印的格式是调用中的相邻参数,如。。。
print(2, "%s", "hello", "%.5u", 25);
我研究过var args,并想出了。。。。
void print(int count, ...)
{
va_list varg;
va_start(varg, count);
while(count-- > 0)
{
char* format = va_arg(varg, char*);
vprintf(format, varg);
}
va_end(varg);
}
vprintf似乎没有使用它从堆栈中使用的项。我的输出是
赫洛赫洛
我相信这也在扩大
printf("%s", "hello);
printf("hello");
那么,vprintf没有使用arg列表中的“hello”,我做错了什么?
更新:根据下面的评论
void print(int count, ...)
{
va_list varg;
va_start(varg, count);
while(count-- > 0)
{
char* format = va_arg(varg, char*);
void* arg = va_arg(varg, void*);
printf(format, arg);
}
va_end(varg);
}
这似乎完成了任务。
最佳答案
vau列表只是一个地址(在典型的实现中)。它是按值传递给函数的,因此调用函数中的原始值是未修改的。