如何解决像İnVprintf一样使用带有参数的Sprintf
我尝试使用sprintf在vprintf函数中实现相同的功能以写入缓冲区,但是我做不到。我怎么了?
#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,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","argumentsqweqweqweqwe");
printf("%s",latestPrint);
return(0);
}
输出:
1 variable argument
2 variable argumentsqweqweqweqwe
1698242904 variable 1698242904 variable
解决方法
您可以使用vsprintf
(与vprintf
相同,但使用数组代替stdout
作为输出):
void WriteToPrint(char *format,...)
{
va_list args;
va_start(args,format);
currentPositionPrint += vsprintf(latestPrint + currentPositionPrint,format,args);
va_end(args);
}
,
您不能将sprintf
与可变参数一起使用。您需要改用vsprintf
:
更改:
currentPositionPrint += sprintf(currentPositionPrint+latestPrint,args);
收件人:
currentPositionPrint += vsprintf(currentPositionPrint+latestPrint,args);
免费提示::在运算符之间使用空格:foo += bar
比foo+=bar
更具可读性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。