我希望有类似跨平台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
函数可能有什么问题吗?
答案 0 :(得分:1)
您需要在vararg列表中使用vsnprintf / vsnprintf_s函数。
vsnprintf(str, size, format, args);
答案 1 :(得分:1)
As indicated by imbtfab,使用vsnprintf()
代替snprintf()
和_vsnprintf()
代替sprintf_s
。