如何正确使用va_list?

时间:2014-05-10 07:04:27

标签: c variadic-functions

我希望有类似跨平台snprintf功能的东西,所以我试图使用它(也许还有其他解决方案,但我确实想知道):

void string_print(char *str, size_t size, const char *format, ...) {
    va_list args;
    va_start(args, format);
#ifdef _WIN32
    sprintf_s(str, size, format, args);
#else
    snprintf(str, size, format, args);
#endif
    va_end(args);
}

使用示例:

// timeStepNumber == 1
char fileName[40];  
string_print(fileName, 40, "Flow%d.dat", timeStepNumber);

但在这种情况下,我有fileName == "Flow-14843.dat",但va_arg(args, int) == 1。任何人都可以解释一下string_print函数可能有什么问题吗?

2 个答案:

答案 0 :(得分:1)

您需要在vararg列表中使用vsnprintf / vsnprintf_s函数。

vsnprintf(str, size, format, args);

答案 1 :(得分:1)

As indicated by imbtfab,使用vsnprintf()代替snprintf()_vsnprintf()代替sprintf_s

相关问题