c++ - 可变函数参数的奇怪问题

标签 c++ linux parameters

我有一个打印功能运行良好,今天我想在这个函数中添加另一个参数,所以我将它添加为第一个参数,但是所有带有额外参数的消息,如“%d”,都显示不正确,我搜索了几个小时试图理解为什么但没有任何用处,我做错了什么吗?

我尝试添加“__cdecl”,它也没有用。

如果我删除第一个参数“int i”,那么一切正常。 它在带有 Xcode 7.1.2 控制台应用程序的 OS X 10.11 上运行。

void print(int i, const char* format_str, ...) {
    // get parameters
    va_list argptr;
    char buffer[1024] = {0};
    va_start(argptr, format_str);
    vsprintf(buffer, format_str, argptr);
    // log on screen
    std::cout << (char*)buffer << std::endl;
    va_end(argptr);
}

void call_print(const char* format_str, ...) {
    print(1, format_str);
}

int main(int argc, const char * argv[]) {
    // insert code here...
    int test = 2;
    call_print("test with %d", test);
    // print(1, "test with %d", test);
    return 0;
}

好的,我编辑了代码使其可以运行,看起来问题出在扭曲的函数上,我应该如何改正?

如果直接调用print,它可以正常工作,如果使用call_print,它会打印“test with 1606416520”,如果去掉第一个参数“int i”,它也可以....

最佳答案

call_print 没有将参数“test”传递给 print

跳过call_print,直接调用print

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

相关文章:

linux - zabbix monit switch,想获取interface 0/1的总流量

javascript - 读取 URL 参数时代码未获取预期值

javascript - 将对象作为参数传递到 Angular ui-router

java - Ant 在 Linux 上构建失败

c++ - 初学者 : How to use the Pantheios logging API library as a replacement for #ifdef DEBUG? 如何定义 SEVLEVEL?

c++ - 在 Qt5 中的多个弹出窗口小部件上接收鼠标 EnterEvent 和 LeaveEvent

c++ - 使用元编程进行消息队列管理

python - session 未创建异常 : Message: session not created from disconnected: unable to connect to renderer using Chromedriver on Linux Centos 7 Server

powershell - 向 SQLCommand 添加参数并在以后添加值

c++ - C++ 中 "extension methods"的标准化提案在哪里?