我有一个打印功能运行良好,今天我想在这个函数中添加另一个参数,所以我将它添加为第一个参数,但是所有带有额外参数的消息,如“%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/