1

I try to achieve same thing in vprintf function using sprintf to write into buffer, however I can not do it. What is my mistake?

#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);
}

Output:

1 variable argument
2 variable argumentsqweqweqweqwe
1698242904 variable 1698242904 variable
Jabberwocky
  • 48,281
  • 17
  • 65
  • 115
OsmanBerk
  • 33
  • 1
  • 5

2 Answers2

2

You can use vsprintf (same as vprintf but using an array as output instead of stdout):

void WriteToPrint(char *format, ...)
{
   va_list args;
   
   va_start(args, format);
   currentPositionPrint += vsprintf(latestPrint + currentPositionPrint, format, args);
   va_end(args);
}
David Ranieri
  • 39,972
  • 7
  • 52
  • 94
1

You can't use sprintf with variable arguments. You need to use vsprintf instead:

Change:

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

to:

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

Free hint: use spaces between operators: foo += bar is more readable than foo+=bar.

Jabberwocky
  • 48,281
  • 17
  • 65
  • 115