大家;
请帮助我:
#include "fstream"
#include "iostream"
#include "string"
#include "stdarg.h"
using namespace std;
void f(char a,...)
{
cout<<a;
va_list list;
va_start(list,a);
cout<<va_arg(list,char)<<" ";
va_end(list);
};
int main()
{
f('a','b','c','d');
system("pause >> void");
return 0;
}
必须提供此结果
a b c d
但它仅仅支持
a b
我做错了什么?
答案 0 :(得分:1)
两个问题:
至少在某些编译器上,将char
传递给varargs函数会被提升为int
。我自己忘记了这个,直到我敲出了一些测试代码并且编译器唠叨了。这意味着您的8位刚刚变为32位或64位。这可能会导致非常好的 Kaboom!
和
cout<<va_arg(list,char)<<" ";
每次调用va_arg都会返回一个变量,即字符&#39; b&#39;在这种情况下。要获得&#39; c&#39;你必须再打电话给它。等...
这会让你知道何时停止调用va_arg这个有趣的问题。
这是一个廉价的黑客:
#include "fstream"
#include "iostream"
#include "string"
#include "stdarg.h"
using namespace std;
void f(char a,...)
{
cout<<a;
va_list list;
va_start(list,a);
char ch = (char)va_arg(list,int);
while (ch != '\0') // stopping on null
{
cout << " " << ch; // cout << a didn't have a space appended so I
// reversed the placement here
ch = (char)va_arg(list,int);
}
va_end(list);
};
int main()
{
f('a','b','c','d', '\0'); // note the added null.
cout << endl;
system("pause >> void"); // better ways to do this cin >> junk, for one
return 0;
}