4

我不明白为什么会这样:

Printf.sprintf "%08s" "s" = Printf.sprintf "%8s" "s"
- : bool = true

换句话说,我希望:

Printf.sprintf "%08s" "s"
- : string = "0000000s"

而不是实际结果:

- : string = "       s"

有人可以澄清为什么会这样吗?

4

2 回答 2

5

从 的文档中printf,您可以看到该0标志不适用于%s.

0:对于数字转换,用零而不是空格填充。

(重点是我的。)

请注意,在 C 中,它会导致未定义的行为。

于 2013-01-23T18:39:47.983 回答
2

当我在 C 中尝试您的格式说明符时,我收到以下警告:

warning: flag '0' results in undefined behavior with 's' conversion specifier

假设我的编译器不疯狂(Mac OS X 10.8.2),这表明 OCaml 的转换很好。

于 2013-01-23T18:45:47.827 回答