gpt4 book ai didi

c++ - 可变参数函数崩溃

转载 作者:行者123 更新时间:2023-11-30 01:00:00 24 4
gpt4 key购买 nike

我有一个函数,它应该根据格式字符串接受可变数量的参数(使用可变参数):

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 << va_arg(listPointer, char*) << endl;

cout << va_arg(listPointer, char) << 结束;

它打印“a”。

我做错了什么?

最佳答案

应该是va_start(listPointer, argformat)va_start最后命名的参数 作为它的第二个参数。 (这在技术上意味着您根本不需要预先计算参数字符串的长度——只需遍历字符(遍历可变参数)直到到达字符串的末尾。)

关于c++ - 可变参数函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3425517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com