为什么C没有snwprintf函数?

jam*_*lin 11 c

有谁知道为什么snwprintfC标准库中没有功能?

我知道swprintf,但是它没有与真实wchar_t版本相同的语义snprintf.据我所知,没有简单的方法来实现一个snwprintf函数使用[v]swprintf:

不同snprintf,swprintf不返回必要的缓冲区大小; 如果提供的缓冲区不足,则只返回-1.这与由于编码错误导致的失败无法区分,因此我不能继续使用逐渐增大的缓冲区重试,希望它最终会成功.

我想我可以将缓冲区的最后一个元素设置为非NUL,调用swprintf,并假设如果该元素之后是NUL则发生截断.但是,这有保证吗?如果swprintf失败,标准不指定缓冲区应处于什么状态.(相反,snprintf描述了哪些字符被写入以及哪些字符被丢弃.)

Rob*_*ble 5

请参阅此处由 Larry Jones 给出的答案。

本质上,swprintf是在 C95 中添加的,而snprintf在 C99 中添加的,并且由于许多实现已经返回了所需字符的数量(for snprintf),这似乎是一件有用的事情,这是标准化的行为。他们认为该行为的重要性不足以swprintf通过添加它来破坏向后兼容性(几年前添加时没有该行为)。

  • 我同意他们不能通过更改“swprintf”来破坏向后兼容性,但他们可以添加一个新的“snwprintf”函数。 (2认同)
  • 实际上,标准化之前的许多历史版本的 `snprintf` 具有与 `swprintf` 相同的破坏性“返回 -1”行为。委员会认为它有问题,并指定了正确的行为,这破坏了与旧 Unix (SUSv2) 标准的兼容性。 (2认同)