代码之家  ›  专栏  ›  技术社区  ›  jamesdlin

为什么C没有snwprintf函数?

c
  •  11
  • jamesdlin  · 技术社区  · 14 年前

    有人知道为什么没有 snwprintf C标准库中的函数?

    我知道 swprintf 但这和真的语义不同, wchar_t 版本 snprintf . 据我所知,实现 SNWPRNTF 使用函数 [v]swprintf :

    不像 SNPrTNF , SWIPNTF 不返回必需的缓冲区大小;如果提供的缓冲区不足,则只返回-1。这与由于编码错误而导致的失败是不可区分的,所以我不能不断地用越来越大的缓冲区重试,希望它最终会成功。

    我想我可以将缓冲区的最后一个元素设置为非nul,调用 SWIPNTF ,并假定如果该元素之后为nul,则会发生截断。但是,这是否保证有效?标准没有指定缓冲区应处于的状态,如果 SWIPNTF 失败。(相比之下, SNPrTNF 描述写入和丢弃的字符。)

    1 回复  |  直到 14 年前
        1
  •  4
  •   Robert Gamble    14 年前

    看看拉里·琼斯给出的答案 here .

    基本上, swprintf 在C95中添加 snprintf 已在C99中添加,由于许多实现已返回所需字符数(对于 SNPrTNF )这似乎是一件有用的事情,那就是标准化的行为。他们认为这种行为不足以破坏与 SWIPNTF 通过添加它(几年前没有添加这种行为)。