如何在va_start中使用字符串?
问题描述:
出于某种原因,我不能得到这个工作:如何在va_start中使用字符串?
void examplefunctionname(string str, ...){
...
va_start(ap, str.c_str());
也没有我得到这个工作:
void examplefunctionname(string str, ...){
...
int len = str.length();
char *strlol = new char[len+1];
for(int i = 0; i < len; i++){
strlol[i] = str[i];
}
strlol[len] = 0;
va_start(ap, strlol);
但确实:
void examplefunctionname(const char *str, ...){
...
va_start(ap, str);
有人能告诉我如何我那里可以用字符串代替const char *
?
其输出的随机数,当我打电话examplefunctionname("%d %d %d", 1337, 1337, 1337)
答
从文档:
va_start(va_list ap, last)
...参数last
是可变的参数列表,即最后一个参数,它的调用函数知道的类型前的最后一个参数的名称。
您在您的工作示例中已正确完成此操作:va_start(ap, str)
和str
是最后一个已知参数。但在另外两个例子中,你将奇怪的东西传递给va_start
。
答
va_start
是使用第二个参数作为位置的宏,因此你需要用你给的最后一个例子。
答
va_start需要先前的参数。这意味着你必须直接传递str,而不管它是什么类型的。它不需要一个const char *,它不会为你解析字符串。
答
void examplefunctionname(string str, ...){
...
va_start(ap, str);
为什么不在函数接受`string`的例子中使用`va_start(ap,str)`?您应该在`va_start`宏中使用参数的名称,而不是任意的表达式。 – 2011-01-10 15:52:57