0

我想将该函数修改printf为一个新函数,该函数printf2只是在要打印的消息前面加上Hello.

我可以做

void printf2(char message[]) {
    printf("Hello ");
    printf(message);
}

问题是我不能为messagehas %d,%c等情况传递额外的参数。

我怎样才能printf2接受尽可能多的参数printf,并将它们传递给printf

4

3 回答 3

2

上面的评论为您指明了正确的方向,但这里有一个示例,说明如何添加标签 (Hello)。

注意:我使用了sn版本的printf来格式化一个不应该溢出我的临时缓冲区的新字符串,并且假设 *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);
}
于 2012-07-19T15:52:11.553 回答
0
  1. 您应该使用以下函数来控制可变参数。

    void va_start( va_list arg_ptr, prev_param );   
    type va_arg( va_list arg_ptr, type );   
    void va_end( va_list arg_ptr );  
    
  2. 判断格式字符串。使用switch()语句判断%d、、%c%s

于 2012-07-19T15:50:58.697 回答
0
void print_message(char *format, ...)
{
    printf("%s", "Hello: ")
    va_list ptr;
    va_start(ptr, format);
    vprintf(format, ptr);
    va_end(ptr);
}

笔记:

  1. printf("%s", "Hello: ") 比 printf("Hello: ") 快一点(通过跳过格式字符串阶段的扫描)
  2. printf(消息);真是个坏主意。当消息包含“%s”之类的内容时,它会崩溃。
于 2012-07-19T19:51:31.453 回答