将 Sprintf 与参数一起使用,就像在 Vprintf 中一样

Using Sprintf With Arguments Just Like İn Vprintf

我尝试在 vprintf 函数中使用 sprintf 写入缓冲区来实现同样的事情,但是我做不到。我的错误是什么?

#include <stdio.h>
#include <stdarg.h>


char latestPrint[1000];
int currentPositionPrint=0;



void WriteFrmtd(char *format, ...) {
   va_list args;
   
   va_start(args, format);
   vprintf(format, args);
   va_end(args);
}

void WriteToPrint(char *format, ...) {
   va_list args;
   
   va_start(args, format);
   currentPositionPrint+=sprintf(currentPositionPrint+latestPrint , format, args);
   va_end(args);
   
}

int main () {
   WriteFrmtd("%d variable argument\n", 1);
   WriteFrmtd("%d variable %s\n", 2, "argumentsqweqweqweqwe");
   
   WriteToPrint("%d variable %s\n", 2, "argumentsqweqweqweqwe");
   
   printf("%s",latestPrint);
   return(0);
}

输出:

1 variable argument
2 variable argumentsqweqweqweqwe
1698242904 variable 1698242904 variable

您不能将 sprintf 与可变参数一起使用。您需要使用 vsprintf 代替:

变化:

currentPositionPrint += sprintf(currentPositionPrint+latestPrint , format, args);

至:

currentPositionPrint += vsprintf(currentPositionPrint+latestPrint , format, args);

免费提示:在运算符之间使用空格:foo += barfoo+=bar.

更具可读性

您可以使用 vsprintf(与 vprintf 相同,但使用数组作为输出而不是 stdout):

void WriteToPrint(char *format, ...)
{
   va_list args;
   
   va_start(args, format);
   currentPositionPrint += vsprintf(latestPrint + currentPositionPrint, format, args);
   va_end(args);
}