【问题标题】:varargs function crashing可变参数函数崩溃
【发布时间】:2010-08-06 15:56:19
【问题描述】:

我有一个函数应该基于格式字符串采用可变数量的参数(使用可变参数):

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”。

我做错了什么?

【问题讨论】:

    标签: c++ crash variadic-functions


    【解决方案1】:

    应该是va_start(listPointer, argformat)。 va_start 将 last named parameter 作为其第二个参数。 (从技术上讲,这意味着您根本不需要预先计算参数字符串的长度——只需遍历字符(在进行过程中遍历可变参数)直到到达字符串的末尾。)

    【讨论】:

    • 这就是我不阅读文档的结果。谢谢,这就是答案。
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 2016-05-29
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多