C 修改printf
我想将函数C 修改printf,c,C,我想将函数printf修改为一个新函数printf2,该函数只在要打印的消息前面加上Hello 我可以 void printf2(char message[]) { printf("Hello "); printf(message); } 问题是当消息具有%d、%c等时,我无法传递额外的参数 如何让printf2接受printf所能接受的尽可能多的参数,并将它们传递给printf 您应该使用下面的函数来控制变量参数 void va_start( va_list arg_ptr,
printf
修改为一个新函数printf2
,该函数只在要打印的消息前面加上Hello
我可以
void printf2(char message[]) {
printf("Hello ");
printf(message);
}
问题是当消息
具有%d
、%c
等时,我无法传递额外的参数
如何让printf2
接受printf
所能接受的尽可能多的参数,并将它们传递给printf
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
%d
、%c
、%s
等上面的注释为您指出了正确的方向,但下面是一个如何预先添加标记(Hello)的示例 注: 我使用了printf的s和n版本来格式化一个新字符串,该字符串不应溢出我的临时缓冲区,并且假定*MAX_MSG_SIZE*在其他地方被适当定义
void printf2(const char *format, ...)
{
char buffer[MAX_MSG_SIZE] = "";
va_list args;
va_start(args,format);
vsnprintf(buffer, MAX_MSG_SIZE, format, args);
va_end(args);
printf("Hello: %s\n", buffer);
}
注:
查看
vprintf
:可能重复@KeithHalligan:我在嵌入式设备上,没有vprintf
。你确定没有vprintf()?也许您只是没有#包括并假设结果错误意味着您没有vprintf()?您使用的是哪种嵌入式设备,以及哪种编译器?@Randomblue-请提供有关您的嵌入式开发环境(编译器、C99等)的一些详细信息。似乎不需要单独调用printf
;因此,不需要打印到字符串(及其相关的MAX_MSG_大小限制)。移动printf(“Hello:”)代码>高于va_开始,并将vsnprintf()
替换为printf(格式,args)
print to string在我的示例从中提取的代码段中是必需的-但是您是正确的,有两种方法可以实现这一点。将vsnprintf()
替换为printf(格式,args)代码>不起作用。将其替换为vprintf(格式,args)代码>可以。
void print_message(char *format, ...)
{
printf("%s", "Hello: ")
va_list ptr;
va_start(ptr, format);
vprintf(format, ptr);
va_end(ptr);
}