Fro*_*zen 1 c++ crash variadic-functions
我有一个函数应该根据格式字符串获取可变数量的参数(使用varargs):
void va(const char* name, const char* argformat, ...) {
int numOfArgs = strlen(argformat);
std::string buf = "asdf";
va_list listPointer;
va_start(listPointer, numOfArgs);
char* blah;
for(int i = 0; i < numOfArgs; i++) {
switch (argformat[i]) {
case 's':
cout << va_arg(listPointer, char*) << endl;
break;
case 'i':
cout << va_arg(listPointer, int) << endl;
break;
case 'f':
cout << va_arg(listPointer, float) << endl;
break;
case 'b':
cout << va_arg(listPointer, bool) << endl;
break;
default:
break;
}
}
va_end(listPointer);
return;
}
int main() {
va("fe", "sb", "asdf", true);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它崩溃了.
如果我改变
cout << va_arg(listPointer,char*)<< endl;
to
cout << va_arg(listPointer,char)<< end;
它打印"a".
我究竟做错了什么?
它应该是va_start(listPointer, argformat).va_start将最后一个命名参数作为其第二个参数.(从技术上讲,你根本不需要预先计算参数字符串的长度 - 只需遍历字符(随着时间的推移迭代varargs),直到你到达字符串的末尾.)
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |