将 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 += bar
比foo+=bar
.
更具可读性
您可以使用 vsprintf
(与 vprintf
相同,但使用数组作为输出而不是 stdout
):
void WriteToPrint(char *format, ...)
{
va_list args;
va_start(args, format);
currentPositionPrint += vsprintf(latestPrint + currentPositionPrint, format, args);
va_end(args);
}
我尝试在 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 += bar
比foo+=bar
.
您可以使用 vsprintf
(与 vprintf
相同,但使用数组作为输出而不是 stdout
):
void WriteToPrint(char *format, ...)
{
va_list args;
va_start(args, format);
currentPositionPrint += vsprintf(latestPrint + currentPositionPrint, format, args);
va_end(args);
}