【发布时间】:2018-09-16 01:35:07
【问题描述】:
我正在为一个类实现一个类似printf(const char * format, ...) 的方法,在调用vsprintf() 执行之前,我需要确定它的输出的确切大小,仅给出提供的format 和va_list 中给出的参数实际写作。
有没有一个函数可以使用format 和va_list 来生成输出的确切长度?
【问题讨论】:
-
va_list 非常容易出错,因为它会让用户在期望整数时通过大象而不表示任何失败,而是进入UDB的土地,通常结果非常糟糕。它完全依赖于类型和大小假设的格式说明符,并且相当于 reinterpret_cast。如果您在 C++ 商店,我强烈建议您使用更安全的方法来达到您的目的。这些 C-isms 的存在是为了向后兼容。不要用 void 指针滥用和 UDB 污染你闪亮的新代码
-
@ChristopherPisz 如果您不知道如何正确执行,那么每个代码都以某种方式容易出错。你有更好的建议如何在没有可变参数的情况下使用它?
-
@πάνταῥεῖ 容易出错,然后完全忽略类型安全。但是,我认为在runtime 中并非所有事情都容易出错,即使您没有正确使用它。编译时间,当然……这是我们的目标,在修复成本最低的时候捕获错误。 ||你要我提议什么?除了提供一种使用可变参数列表的方法之外,OP 没有提及他的实际目标。我告诉他他不应该。对于另一种解决方案,他需要解释他为什么要这样做,他认为他会通过什么样的事情,以及他将如何处理这些事情。
-
@ChristopherPisz - 我的目标是为记录调试消息的类编写类似 printf() 的方法。我喜欢 printf() 的感觉和灵活性,它实际上正在取代我非常不喜欢的像
-
@Christohper
<<运算符风格有很多缺点和缺陷,让方便的国际翻译只需要不同的词位。否则就不需要The Boost Format library
标签: c++ visual-studio-2015 printf