我有一个函数,应该根据格式字符串采用可变数量的参数(使用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;}它崩溃了。如果我改变 cout 至 cout 它显示“a”。我究竟做错了什么? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 应该是va_start(listPointer, argformat)。 va_start将最后一个命名的参数作为第二个参数。 (从技术上讲,这根本不需要预先计算参数字符串的长度-只需遍历字符(在迭代过程中遍历varargs),直到到达字符串末尾为止。)关于c++ - varargs函数崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3425517/ (adsbygoogle = window.adsbygoogle || []).push({});
10-09 05:38