我正在使用 vsnprintf
(据我所知),但结果很奇怪。我已将代码简化为以下示例:
void func(char *aaa, ...)
{
char *buf;
va_list args;
int size;
va_start(args, aaa);
size = vsnprintf(NULL, 0, aaa, args)+1;
buf = malloc(size);
vsnprintf(buf, size, aaa, args);
printf("%s",buf);
free(buf);
va_end(args);
}
int main(int argc, char **argv)
{
func("abc %s", "def\n");
return 0;
}
我希望打印“abc def”,但我得到的是“abc”,后跟一些垃圾文本。有谁知道我在哪里搞砸了?
最佳答案
va_start(args, aaa);
size = vsnprintf(NULL, 0, aaa, args)+1; // Reads all arguments
buf = malloc(size);
vsnprintf(buf, size, aaa, args); // Tries to read all arguments again
printf("%s",buf);
free(buf);
va_end(args);
请参阅注释行。您必须在使用所有参数的这两个调用之间重置
args
。插:
va_end(args);
va_start(args, aaa);
关于c - vsnprintf 和 varargs 不工作,奇怪的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26835027/